35

CSiginIn、、、CSignUpはすべてそのように宣言された関数CTryItですCBlocks

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

2 に答える 2

72

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

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

ドキュメントから:

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

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

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

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

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

于 2012-05-19T19:29:29.587 に答える