2012-05-19 7 views
35

CSiginIn, CSignUp, CTryIt, CBlocks alle Funktionen sind als solchejshint erwartet, dass die neue ‚Vorsilbe‘ für Funktionen

erklärt
function CSignIn(){//stuff here} 

noch JSHint sagt, dass ich die ‚neue‘ ‚Vorsilbe‘ fehle. Was kann ich tun, um das zu beheben?

Sie sind nur Funktionen innerhalb des Modulmusters. Außerdem fordert es mich auf, Semikolons zu entfernen, die ich am Ende der Funktion, die ich getan habe, platziert habe.

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

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

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

Funktion Beispiel ...

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

Antwort

67

Wenn newcap aktiviert ist, JSHint erwartet mit einem Großbuchstaben beginnen Funktionen Bauer zu sein und daher mit dem new Schlüsselwort aufgerufen werden.

Lösung: Entweder deaktivieren Sie diese Option oder benennen Sie Ihre Funktionen um.

Vom documentation:

Diese Option erfordert, dass Sie Namen von Konstruktorfunktionen Kapital zu schlagen. Großschreibung Funktionen, die mit new Operator verwendet werden sollen, ist nur eine Konvention, die Programmierer hilft, Konstruktorfunktionen von anderen Arten von Funktionen visuell zu unterscheiden, Fehler zu erkennen, wenn Sie this verwenden.

Wenn Sie dies nicht tun, wird Ihr Code in Browsern oder Umgebungen nicht beschädigt, aber es wird etwas schwieriger, herauszufinden, ob die Funktion mit oder ohne new verwendet werden sollte. Und das ist wichtig, weil this auf das globale Objekt statt auf ein neues Objekt zeigt, wenn die Funktion verwendet wird, die mit new verwendet werden sollte.

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

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

Für ein tiefes gehende Verständnis darüber, wie this funktioniert, las Understanding JavaScript Function Invocation and "this" von Yehuda Katz.

+1

O.K. Ich möchte andere nicht verwirren, also werde ich wahrscheinlich die Kappen verlieren. Danke für die Info. –

6

Felix Kling gab Ihnen bereits die richtige Antwort. Der Vollständigkeit halber würde ich bemerken, dass newcap standardmäßig true ist (die Dokumentation gibt es nicht an, aber Sie können es in der source code lesen). Das bedeutet, dass das Löschen der Einstellung newcap: true in den JSHint-Optionen die Warnung nicht deaktiviert. Stattdessen müssen Sie explizit newcap: false festlegen.