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解压出来的“本”。
for ( element = 0; element < this.tag_array.length; element++ ) {
document.getElementById( this.tag_array[element] ).addEventListener(
"click", vFlipBP );
}
现在我已经当我使用“这”在vFlipBP,我得到BC预计“这”在一个构造函数一起使用的错误。
function vFlipBP(){ var foo = this ; } // jshint error #2
正因为如此,我觉得不可能使jsthint.com在这个特殊的功能快乐。
没关系关闭jshint.com选项。
是否有可能编写可以通过jshint.com默认设置代码。
我只是想了解背后为什么它使得这些警告/错误的推理。
我不担心错误挂了(这是可选的我只能把它关掉)......我只是想知道是否可以通过默认的...有我错过了一个角度。
既然你似乎并不关心使几个相同的功能,似乎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 );
}
它看起来像你想使用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
这个选项? 在谷歌关闭编译器,你可以通过使用这样做@this
指定你知道this
将是该函数(和避免该警告) https://developers.google.com/closure/compiler/docs/js-for -compiler