1
for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", function(){ /* constructor function here */ } );  // jshint.com error #1
}

このコードは、jshint.com bc でエラーを引き起こします。これは、ループで宣言された関数を表示したくないためです。

ただし、単純な関数参照を渡すと、jshint を再び壊さずに「this」を抽出することはできません。

for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", vFlipBP );
}

これで、vFlipBP で「this」を使用すると、「this」がコンストラクター関数と組み合わせて使用​​されることを期待しているというエラーが表示されます。

function vFlipBP(){ var foo = this ; } // jshint error #2

このため、この特定の関数で jsthint.com を満足させることは不可能だと思います。

jshint.com オプションをオフにすることは気にしないでください。

jshint.com のデフォルト設定を渡すコードを書くことは可能ですか。

これらの警告/エラーが発生する理由を理解しようとしています。

エラーについて心配することに夢中になっているわけではありません(オプションであり、オフにすることもできます)...デフォルトを渡すことができるかどうかを知りたいだけです...見逃した角度はありますか。

4

2 に答える 2

1

複数の同一関数を作成することに関心がないように見えるので、JSHint はこれを気にしないようです...

var element;
for ( element = 0; element < 10; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", make_func() );
}

function make_func() {
  "use strict";
  return function(){ var foo = this; alert(foo); };
}

関数宣言構文を使用しない場合も受け入れられるようです...

var element;
var the_func = function(){ 
  "use strict";
  var foo = this; 
  alert(foo); 
};


for ( element = 0; element < 10; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", the_func );
}
于 2012-08-14T22:33:59.703 に答える
1

コールバックのコンテキストとして使用したいようですがthis、コンストラクターではない関数でこれを使用することについて jshint が文句を言います。

これがあなたが持っていたコードだとします

function showId() {
   alert(this.id); // jshint warning here
}
for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", showId ); 
}

を使用しないように関数を書き直す必要がありますthis。ここに可能な方法があります

function createHandler(obj) {
    return function(e) {
        alert(obj.id);
    }
}

for ( element = 0; element < this.tag_array.length; element++ ) {
    var nodeId = this.tag_array[element];
    var node =  document.getElementById(nodeId);
    node.addEventListener("click", createHandler(node)); 
}

この特定の関数が安全に使用できることを jshint に伝えることはできませんthisか? このvalidthisオプションで?Google Closure Compilerでは、 を使用して 、その関数に@this何が含まれるかを知っていることを指定することでこれを行うことができthisます(そして警告を回避します)https://developers.google.com/closure/compiler/docs/js-for-compiler

于 2012-08-14T22:28:54.370 に答える