Javascript 为什么JSHint警告我使用';这';在回调函数中?
我使用的IDE()合并了JSHint,当它检测到错误时会给我一个警告。作为一项原则,我尝试更正代码以更正这些错误。有一个我现在看不到的方法:Javascript 为什么JSHint警告我使用';这';在回调函数中?,javascript,jquery,jshint,Javascript,Jquery,Jshint,我使用的IDE()合并了JSHint,当它检测到错误时会给我一个警告。作为一项原则,我尝试更正代码以更正这些错误。有一个我现在看不到的方法: $("#component-manager tr:not(.edit-component) td").on("click", function() { if ($(this).index() !== 0) { var checkbox = $(this).parent().find("input[name=component-sel
$("#component-manager tr:not(.edit-component) td").on("click", function() {
if ($(this).index() !== 0) {
var checkbox = $(this).parent().find("input[name=component-selected]");
checkbox.trigger("click");
}
});
这段代码给了我一个警告:“在回调函数中使用“This
”
我有两个问题:
this
会更好(因为JSHint试图推广这一点)您的代码没有任何错误,也没有任何“更好”的编码方式。这正是jsHint所做的,可能只是因为有些人在其他类型的回调中使用
This
时出错
您可以在代码中插入一条注释,告诉jsHint忽略这个特殊用法。我会去看看我是否能找到它,如果我找到了,我会把它添加到我的答案中。您可以使用jsHint的validthis
选项:忽略特定函数的此警告
我自己没有尝试过,但根据文档,您可以将此添加到函数中:
/* jshint validthis: true */
或者,配置文件可以与jshint一起使用,以更改此选项的默认值(您必须弄清楚如何在IDE中执行此操作)。您的代码没有问题,也没有任何“更好”的编码方式。这正是jsHint所做的,可能只是因为有些人在其他类型的回调中使用
This
时出错
您可以在代码中插入一条注释,告诉jsHint忽略这个特殊用法。我会去看看我是否能找到它,如果我找到了,我会把它添加到我的答案中。您可以使用jsHint的validthis
选项:忽略特定函数的此警告
我自己没有尝试过,但根据文档,您可以将此添加到函数中:
/* jshint validthis: true */
或者,配置文件可以与jshint一起使用,以更改此选项的默认值(您必须弄清楚如何在IDE中执行此操作)。该代码没有问题,您的IDE就是不智能。在我的IDE中,函数总是返回一些东西,但由于我使用了条件if和else,它给了我一个警告,可能不会返回任何东西,并添加了“void”(使用XCode)。做我所做的,忽略它
如果它让你感到非常不舒服,并且只有在你使用
this
时才会发生这种情况,你可以照洛夫拉德说的做,使用函数(e){
并替换$(this)
使用e.target
该代码没有问题,您的IDE就是不智能。在我的IDE中,函数总是返回一些东西,但由于我使用了条件if和else,它给了我一个警告,可能不会返回任何东西并添加“void”(使用XCode)。按我所做的做,忽略它
如果它给你带来了极大的麻烦,并且这种情况只发生在你使用
this
时,你可以按照洛夫拉德说的做,使用函数(e){
并用e.target
替换$(this)
,这来自于通常错误实现的this
模式。请参阅示例
通常有更好的方法来获取对相关对象的引用。在这种情况下,您需要向回调函数声明一个参数,并显式引用事件目标
$("#component-manager tr:not(.edit-component) td").on("click", function(event) {
if ($(event.target).index() !== 0) {
var checkbox = $(event.target).parent().find("input[name=component-selected]");
checkbox.trigger("click");
}
});
这来自于通常错误实现的
This
模式。有关示例,请参阅
通常有更好的方法来获取对相关对象的引用。在这种情况下,您需要向回调函数声明一个参数,并显式引用事件目标
$("#component-manager tr:not(.edit-component) td").on("click", function(event) {
if ($(event.target).index() !== 0) {
var checkbox = $(event.target).parent().find("input[name=component-selected]");
checkbox.trigger("click");
}
});
我认为IDE中有一个bug或一个错误配置。在这样的jQuery回调中使用<代码>这个<代码>是明确和热情的鼓励。JSHIT不给我任何警告或错误。您可以使用<代码>函数(e){ $(e目标)…<代码>,而不是<代码>函数(){$(这个)…改进代码的唯一方法是缓存jQuery对象:
var$this=$(this)它不会被排除在错误中,但是它被认为是好的实践,特别是如果你一再重复做同样的选择。可能不是你需要的东西,而是将来的代码要考虑的事情。我会考虑IDE中的bug或错误配置。非常鼓励。JShint不会给我任何警告或错误。您可以使用function(e){$(e.target).
而不是function(){$(this).
可以改进代码的唯一方法是缓存jQuery对象:var$this=$(this)这是一个很好的实践,特别是如果你一再重复做同样的选择。可能不是你需要的东西,而是将来要考虑的代码。我现在正在按照你的建议去做。它对我没有太大的影响,但正如@俄勒冈州的建议,我认为这是一个更好的方法。我想这是一种效率较低的机制:我可以容忍错误!(更改答案…)我现在正在按照你的建议做。这不会让我太烦恼,但正如@OregonTrail所建议的,我认为这是一种更好的方式。@jfriend00我想这是一种效率较低的机制:我可以容忍错误!(改变答案…)