2013-06-18 11 views
6

JSLint besteht darauf, dass mit dieser Nutzung .call etwas falsch gibt es:JSLint besteht darauf, dass "Unexpected" nennen"

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); 

} 

falsch ist. Naja, Unerwartetes sowieso. Ich kann einfach nicht für das Leben von mir herausfinden warum, stimmt etwas mit dem Code nicht? Es scheint zu funktionieren, aber ich mache mir Sorgen über unerwartetes Verhalten.

+0

Wenn '_constructTable' bereits auf der Instanz verfügbar ist (vermutlich über' GridView.prototype'), warum brauchen Sie '.call' zu benutzen? Kannst du nicht 'this._constructTable (tableArray);'? –

+0

@James Allardice: Ich nicht, und ja, ich kann. Ich experimentiere gerade mit "Anruf". Ist JSLint clever genug, um zu sehen, dass der Code dumm ist? – Fenixp

+1

Es scheint ja zu sein. Wenn Sie 'this.' vor' _constructTable' entfernen oder 'this' in einen anderen' 'call''ändern, warnt JSLint nicht mehr. –

Antwort

10

Die Ursache für die Warnung ist die folgende Zeile ein:

this._constructTable.call(this, tableArray); 

Dieses Konstrukt scheint weitgehend sinnlos zu sein - Sie sind im Rahmen der this die _constructTable Methode aufrufen, die die gleichen Zusammenhang wäre es wäre, aufgerufen, wenn Sie es über einen normalen Aufrufausdruck aufgerufen haben. JSLint erwartet genau das:

this._constructTable(tableArray); 
Verwandte Themen