为什么JSHINT抱怨这是一个严格的违规行为?
我认为这可能是严重违规使用这个关键字和揭示模块模式的副本
我有这个代码:
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)
会将其绑定到全局对象(浏览器中的window
)。 严格的模式下, this
是undefined
,你会遇到麻烦。
大概,你的意思是调用这个函数绑定this
上下文,例如gotoPage.bind(myObj)(5)
或gotoPage.call(myObj, 5)
。 如果是这样,你可以忽略JSHint,因为你不会产生任何错误。 但是,它告诉你,你的代码对于任何人来说都是不清楚的,因为在一些不明显的方法中使用this
代码是相当混乱的。 将对象作为parameter passing会更好:
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); }
我已经有了这个消息,不是以大写字母开头的函数。
"use strict"; // ---> strict violation function something() { this.test = ""; } // ---> just fine (note the capital S in Something) function Something() { this.test = ""; }
如果将函数声明为variables而不是使用标准函数声明,那么jshint不会将其标记为严格的违规。 所以你可以做以下事情 –
var gotoPage = function (s){ if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);} }; var pageChange = function (event, sorter) { var dd = event.currentTarget; gotoPage.call(sorter, dd[dd.selectedIndex].value); };
如果你正在试图实现一个方法,你可能想要分配给原型:
ExampleClassName.protytpe.gotoPage = function gotoPage(s){ // code using this };
当函数被分配时,JSHint不会发出警告。