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 中导致错误,因为它不想看到在循环中声明的函数。

但是,如果我传入一个简单的函数引用,那么我无法在不再次破坏 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

看起来您想this在回调中用作上下文,但 jshint 抱怨在不是构造函数的函数中使用 this。

所以假设这是你的代码

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 回答
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 回答