web-dev-qa-db-ja.com

jshintは関数の新しい「プレフィックス」を期待します

CSiginInCSignUpCTryItCBlocksはすべて、そのように宣言された関数です

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

newcapが有効になっている場合、JSHintは大文字で始まる関数がコンストラクターであり、したがってnewキーワードで呼び出されることを想定しています。

解決策:このオプションを無効にするか、関数の名前を変更してください。

ドキュメント から:

このオプションでは、コンストラクター関数の名前を大文字にする必要があります。 new演算子で使用することを目的とした関数の大文字化は、thisを使用する際にプログラマーがコンストラクター関数を他のタイプの関数と視覚的に区別して間違いを見つけるのに役立つ規則にすぎません。

そうしないと、ブラウザや環境でコードが壊れることはありませんが、関数をnewの有無にかかわらず使用することが想定されていた場合、コードを読むことによって理解するのが少し難しくなります。 newで使用することを意図していた関数をそれなしで使用すると、thisは新しいオブジェクトではなくグローバルオブジェクトを指すため、これは重要です。

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

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

thisの動作の詳細については、Yehuda Katzによる JavaScript関数の呼び出しと「これ」について を参照してください。

72
Felix Kling

フェリックスクリングはすでにあなたに正しい答えを与えました。完全を期すために、newcapはデフォルトでtrueになっていることに注意します(ドキュメントにはそれが記載されていませんが、 ソースコード で読むことができます)。つまり、JSHintオプションの設定newcap: trueを削除しても警告は無効になりません。代わりに、明示的にnewcap: falseを設定する必要があります。

6
GOTO 0