I think this may be a duplicate of Strict Violation using this keyword and revealing module pattern
我有这个代码:
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) 正在提示。它说“严重违规”。对于突出显示的行:
我使用 Function.call()
然后引用实例是否不合适?
这被认为是不好的风格吗?
最佳答案
JSHint 说“可能严格违反”,因为你在某些东西中使用了 this
,据它所知,这不是一种方法。
在非严格模式下,调用gotoPage(5)
会将this
绑定(bind)到全局对象(浏览器中的window
)。在严格模式下,this
将是 undefined
,您会遇到麻烦。
大概,您的意思是使用绑定(bind)的 this
上下文调用此函数,例如gotoPage.bind(myObj)(5)
或 gotoPage.call(myObj, 5)
。如果是这样,您可以忽略 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);
}
关于javascript - 为什么 JSHINT 提示这是一个严重的违规行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688765/