2012-05-19 5 views
35

CSiginInCSignUpCTryItCBlocksのための新しい「プレフィックス」のすべての機能が jshintはまだJSHintが、私は「新しい」「プレフィックス」が行方不明だと言う機能

function CSignIn(){//stuff here} 

など

として宣言されている期待しています。これを修正するにはどうすればよいですか?

これらはモジュールパターン内の単なる機能です。また、私が行った機能の終わりに置いたセミコロンを削除するように頼んでいます。

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は新しいオブジェクトではなくグローバルオブジェクトを指すため、これは重要です。 this作品は、イェフダカッツによってUnderstanding JavaScript Function Invocation and "this"を読む方法についてのより深い理解のために

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

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

+1

O.K.私は他の人を混乱させたくないので、私はおそらくキャップをゆるめるだろう。情報についての感謝。 –

6

フェリックス・クリングはすでに正しい答えをくれました。完全性を確認するため、newcapはデフォルトでtrueになります(ドキュメントには記載されていませんが、source codeで読むことができます)。つまり、JSHintオプションでnewcap: trueの設定を削除しても警告は無効にならず、明示的にnewcap: falseと設定する必要があります。

関連する問題