2013-06-18 7 views
6

JSLint insiste sul fatto che ci sia qualcosa di sbagliato in questo uso del .Call:JSLint insiste sul fatto che "Unexpected 'call'"

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

} 

è sbagliato. Beh, inaspettato, comunque. Non riesco proprio a capire perché, c'è qualcosa di sbagliato nel codice? Sembra funzionare, ma sono preoccupato per un comportamento inaspettato.

+0

Se '_constructTable' è già disponibile per l'istanza (presumibilmente tramite' GridView.prototype'), perché avete bisogno di usare '.call'? Non puoi semplicemente fare 'this._constructTable (tableArray)?'? –

+0

@ James Allardice: io no, e sì che posso. Per lo più sto sperimentando con "call" adesso. Quindi JSLint è abbastanza intelligente da vedere che il codice è stupido? – Fenixp

+1

Sembra di sì, sì. Se rimuovi 'this' da prima di' _constructTable', o cambia 'this' in qualsiasi altra cosa nel' .call', JSLint non avverte più. –

risposta

10

La causa della segnalazione è la seguente riga:

this._constructTable.call(this, tableArray); 

Questo costrutto sembra essere in gran parte inutile - si sta chiamando il metodo _constructTable nel contesto di this, che sarebbe lo stesso contesto sarebbe chiamato se lo hai chiamato tramite una normale espressione di chiamata. JSLint si aspetta esattamente questo:

this._constructTable(tableArray);