考虑这个简单的代码:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
function g() {
console.log( this.prop );
}
如果我试图验证此代码,jshint给我的错误Possible strict violation.
其中I调用console.log( this.prop );
。 这是因为, this
是在严格模式下未定义的功能。
但我打电话之前,结合此功能,所以this
是正确的对象。
我使用这个“设计模式”,以避免混乱的主要对象。 在参数传递的属性也将杂乱的功能,所以我拒绝这样做。 此外,这也正是bind
是。
有没有办法为JSHint让我做到这一点?
这是非常辛苦,但不运行代码来检测这种情况。 您可以使用选项validthis
来禁止这种警告:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
function g() {
/*jshint validthis:true */
console.log( this.prop );
}
应当指出的是,jshint注释功能范围的。 因此,评论将用于功能工作g
和其内部的功能,而不只是下一行。
您也可以实现,如果你修改代码以下面避免使用同样的效果this
一起。
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( null, this )();
}
};
function g(self) {
console.log( self.prop );
}
下面是不需要的模式或特定标记的jshint的任何改变简单的解决方案:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
G.bind( this )();
}
};
function G() {
console.log( this.prop );
}
jshint假定你下面说功能以大写字母开始的,将被实例化类和总是有约定this
可用。
尝试:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
var g = function() {
console.log( this.prop );
}
这是一个不同的“设计模式”为你把它,它实现了同样的事情,但完全避免了这个问题。
"use strict";
function obj() {
this.prop = '';
}
obj.prototype.f = function obj_f() {
this.prop = 'value';
this.g();
};
obj.prototype.g = function obj_g() {
console.log( this.prop );
};
你会调用它像这样:
var myO = new obj();
myO.f();