2012-05-19 13 views
35

CSiginIn, CSignUp, CTryIt, CBlocks sono tutte le funzioni dichiarate come talijshint si aspetta che il nuovo 'prefisso' per le funzioni

function CSignIn(){//stuff here} 

ancora JSHint dice che mi manca la 'nuova' 'prefisso'. Cosa posso fare per risolvere questo problema?

Sono solo funzioni all'interno del modello di modulo. Inoltre, mi sta chiedendo di rimuovere il punto e virgola che avevo inserito alla fine della funzione che ho fatto.

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

    var publik = function (page) 
    { 
     // page 1 initialization 

     if(page == 1) 
     { 
      CSignIn(); 
      CSignUp(); 
      CTryIt(); 
      CBlocks(); 
     } 

Funzione Esempio ...

function CTryIt() 
{ 
    // pull elements 

    var tryit_button = document.getElementById('tryit_button'); 

    // initialize access to Model 

    tryit_button.addEventListener("click", function() 
    { 
     new AjaxRequest().invoke('ajax_type=ControlTryIt', 
     function(server_response_text) 
     { 
      new AjaxResponse(server_response_text, 'page_change'); 
     }); 

    }, false); 
} 

risposta

67

Se newcap è abilitato, JSHint aspetta funzioni iniziano con la maiuscola ad essere costruttori e quindi di essere chiamati con la parola chiave new.

Soluzione: disabilitare questa opzione o rinominare le funzioni.

Dal documentation:

Questa opzione richiede di capitalizzare i nomi di funzioni di costruzione. Le funzioni di capitalizzazione che devono essere utilizzate con l'operatore new sono solo una convenzione che aiuta i programmatori a distinguere visivamente le funzioni del costruttore da altri tipi di funzioni per aiutare a individuare gli errori quando si utilizza this.

In caso contrario, non si romperà il codice in alcun browser o ambiente, ma sarà più difficile da capire, leggendo il codice, se la funzione doveva essere utilizzata con o senza new. E questo è importante perché quando la funzione che era destinata a essere utilizzata con new viene utilizzata senza di essa, this punterà all'oggetto globale anziché a un nuovo oggetto.

function MyConstructor() { 
    console.log(this); 
} 

new MyConstructor(); // -> [MyConstructor] 
MyConstructor();  // -> [DOMWindow] 

Per una più approfondita comprensione su come this opere, lette Understanding JavaScript Function Invocation and "this" da Yehuda Katz.

+1

O.K. Non voglio confondere gli altri, quindi probabilmente perderò i cappucci ... grazie per le informazioni. –

6

Felix Kling ha già fornito la risposta corretta. Per completezza, vorrei notare che il valore newcap predefinito è true (la documentazione non lo indica, ma è possibile leggerlo nello). Ciò significa che l'eliminazione dell'impostazione newcap: true nelle opzioni JSHint non disabiliterà l'avviso: è invece necessario impostare in modo esplicito newcap: false.

Problemi correlati