2013-06-18 17 views
6

JSLint twierdzi, że coś jest nie tak z tym wykorzystaniem .Połączenia:JSLint twierdzi, że „Unexpected«zadzwoń»”

function GridView(tableArray, tableId, multiselect) { 
    "use strict"; 
    if (multiselect == undefined) { 
     this.multiselect = false; 
    } else { 
     this.multiselect = multiselect; 
    } 

    this.tableID = tableId; 
    this.propertiesArr = []; 
    this.tableHTML = undefined; 
    this.oTable = undefined; 

    this._constructTable.call(this, tableArray); 

} 

jest źle. Cóż, nieoczekiwany. Po prostu nie mogę dla mojego życia dowiedzieć się, dlaczego coś jest nie tak z kodem? Wygląda na to, że działa, ale martwię się nieoczekiwanym zachowaniem.

+0

Jeśli '_constructTable' jest już dostępna na przykład (prawdopodobnie poprzez' GridView.prototype'), dlaczego trzeba użyć '.call'? Nie możesz po prostu zrobić 'this._constructTable (tableArray);'? –

+0

@ James Allardice: Nie, i tak, mogę. W tej chwili głównie eksperymentuję z "połączeniem". Czyżby JSLint był na tyle sprytny, by zobaczyć, że kod jest głupi? – Fenixp

+1

Wygląda na to, że tak. Jeśli usuniesz 'this' z przed' _constructTable', lub zmienisz 'this' na cokolwiek innego w' .call', JSLint przestanie ostrzegać. –

Odpowiedz

10

Przyczyną ostrzeżenia jest następujący wiersz:

this._constructTable.call(this, tableArray); 

Ta konstrukcja wydaje się być w dużej mierze pozbawione sensu - jesteś wywołanie metody _constructTable w kontekście this, który byłby taki sam kontekst byłoby wywoływane, jeśli wywołałeś to za pomocą zwykłego wyrażenia wywołania. JSLint spodziewa się dokładnie, że:

this._constructTable(tableArray); 
Powiązane problemy