2012-05-19 15 views
35

CSiginIn, CSignUp, CTryIt, CBlocks są wszystkie funkcje zadeklarowane jako takijshint spodziewa się, że nowa 'prefix' dla funkcji

function CSignIn(){//stuff here} 

jeszcze JSHint mówi, że brakuje mi 'nowe' 'przedrostek'. Co mogę zrobić, aby to naprawić?

Są to po prostu funkcje wewnątrz wzorca modułu. Również prosi mnie o usunięcie średników, które umieściłem na końcu funkcji, którą zrobiłem.

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

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

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

Przykład Funkcja ...

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

Odpowiedz

67

Jeśli newcap jest włączona, JSHint spodziewa funkcje zaczynające się literą być konstruktorów i dlatego też musi być wywoływana z kluczowych new.

Rozwiązanie: Wyłącz tę opcję lub zmień nazwy swoich funkcji.

Z documentation:

Ta opcja wymaga, aby wykorzystać nazwy funkcji konstruktora. Funkcje wielkiej kapitalizacji, które mają być używane z operatorem new, to tylko konwencja, która pomaga programistom w wizualnym rozróżnianiu funkcji konstruktora od innych typów funkcji, aby ułatwić wykrywanie błędów podczas korzystania z this.

Nie spowoduje to złamania kodu w żadnych przeglądarkach lub środowiskach, ale nieco trudniej będzie się zorientować - czytając kod - jeśli funkcja miała być używana z lub bez new. Jest to ważne, ponieważ gdy funkcja, która ma być używana z new, zostanie użyta bez niej, this wskaże obiekt globalny zamiast nowego obiektu.

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

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

na bardziej dogłębne zrozumienie, w jaki sposób this prace, przeczytaj Understanding JavaScript Function Invocation and "this" przez Yehuda Katz.

+1

O.K. Nie chcę mylić innych, więc prawdopodobnie stracę czapki. Dzięki za informacje. –

6

Felix Kling już dał poprawną odpowiedź. Dla kompletności, chciałbym zauważyć, że newcap domyślnie jest true (Dokumentacja nie podaje go, ale można go przeczytać w source code). Oznacza to, że usunięcie ustawienia newcap: true w opcjach JSHint nie spowoduje wyłączenia ostrzeżenia: zamiast tego należy jawnie ustawić newcap: false.

Powiązane problemy