2012-05-19 33 views
35

CSiginInCSignUpCTryItCBlocks新「字頭」的所有功能宣佈爲jshint預計,功能

function CSignIn(){//stuff here} 

但JSHint說,我很想念'新「字頭」。我能做些什麼來解決這個問題?

它們只是模塊模式中的函數。此外,它要求我刪除我在已完成的函數末尾放置的分號。

var Control = (function() 
{ 

    /** 
    *Publik 
    */ 

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

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

功能示例...

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

回答

67

如果newcap啓用,JSHint預計功能開始用大寫字母是構造函數,因此與new關鍵字調用。

解決方案:禁用此選項或重命名您的功能。

documentation

此選項要求你能夠利用的構造函數的名稱。預計要與new運算符一起使用的函數大小隻是一種約定,可幫助程序員在使用this時,將構造函數與其他類型的函數進行可視化區分以幫助發現錯誤。

不這樣做不會打破任何瀏覽器或環境的代碼,但是這將是一個有點難以弄清楚,通過閱讀代碼,如果本來的功能,有或沒有new使用。這很重要,因爲當new打算使用的功能沒有它時,this將指向全局對象而不是新對象。

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

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

有關this是如何工作的,由耶胡達·卡茨閱讀Understanding JavaScript Function Invocation and "this"一個更深入的瞭解。

+1

O.K.我不想混淆別人,所以我可能會失去帽子..感謝信息。 –

6

Felix Kling已經給你正確的答案。爲了完整性,我會注意到newcap默認爲true(該文檔沒有說明,但您可以在source code中閱讀它)。這意味着在JSHint選項中刪除設置newcap: true將不會禁用警告:相反,您需要明確設置newcap: false