1. ホーム
  2. javascript

[解決済み] なぜJSHINTは、これは厳密な違反だと文句を言うのですか?

2022-12-07 15:56:32

質問

と重複しているのではないでしょうか? Strict Violation このキーワードと revealing module パターンを使用した

こんなコードがありました。

function gotoPage(s){
    if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
}

function pageChange(event, sorter) {
    var dd = event.currentTarget;
    gotoPage.call(sorter, dd[dd.selectedIndex].value);
}

そして、JSHINT (JSLINT) は文句を言っています。 ハイライトされた行に対して、"Strict violation."と言っています。

私の使っている Function.call() を使用して、インスタンスを参照することは不適切でしょうか?

これは悪いスタイルとみなされるのでしょうか?

どのように解決するのですか?

JSHintが "厳密な違反の可能性"と言っています。 this を使用しているためです。

非厳格モードでは gotoPage(5) を呼び出すと this をグローバルオブジェクト ( window に変換します)。ストリクトモードでは thisundefined となってしまい、困ったことになります。

おそらく、この関数をバインドして呼び出すということですね。 this コンテキスト、例えば gotoPage.bind(myObj)(5) または gotoPage.call(myObj, 5) . もしそうなら、JSHint を無視してもエラーは発生しないので大丈夫です。しかし、JSHint はあなたのコードが誰が読んでも不明瞭であることを伝えているのです、なぜなら this を使用することは、明らかにメソッドでないものの内部で非常に混乱するからです。単純にオブジェクトをパラメータとして渡す方が良いでしょう。

function gotoPage(sorter, s) {
    if (s <= sorter.d && s > 0) {
        sorter.g = s;

        sorter.page((s - 1) * sorter.p.size);
    }
}

function pageChange(event, sorter) {
    var dd = event.currentTarget;
    gotoPage(sorter, dd[dd.selectedIndex].value);
}