考虑下面这个简单的代码:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
function g() {
console.log( this.prop );
}
如果我尝试验证这段代码,在调用console.log( this.prop );
的地方,jshint会给出错误Possible strict violation.
。这是因为this
在函数的严格模式下是未定义的。
但是我在调用这个函数之前绑定了它,所以this
是正确的对象。
我使用这个“设计模式”来避免弄乱主对象。在参数中传递属性也会使函数变得混乱,所以我拒绝这样做。此外,这正是bind
的作用所在。
有没有办法让JSHint让我这么做?
发布于 2012-08-22 01:03:58
如果不运行代码就很难检测到这种情况。您可以使用选项validthis
取消显示此警告:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
function g() {
/*jshint validthis:true */
console.log( this.prop );
}
需要注意的是,jshint注释是函数作用域。因此,注释将适用于函数g
及其内部函数,而不仅仅是下一行。
发布于 2015-06-05 23:52:01
如果您将代码修改为以下代码,以避免同时使用this
,也可以达到相同的效果。
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( null, this )();
}
};
function g(self) {
console.log( self.prop );
}
发布于 2015-11-10 22:51:58
这里有一个更简单的解决方案,它不需要对模式或jshint的特定标记进行任何更改:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
G.bind( this )();
}
};
function G() {
console.log( this.prop );
}
jshint假设您遵循这样的约定,即以大写字母开头的函数是将被实例化的类,并且始终具有可用的this
。
https://stackoverflow.com/questions/12057427
复制相似问题