【发布时间】:2012-08-16 22:48:06
【问题描述】:
考虑这个简单的代码:
"use strict";
var obj = {
f: function() {
this.prop = 'value';
g.bind( this )();
}
};
function g() {
console.log( this.prop );
}
如果我尝试验证此代码,jshint 会给我错误Possible strict violation.,我在其中调用console.log( this.prop );。这是因为 this 在严格模式下未定义在函数中。
但是我在调用它之前绑定了这个函数,所以this是正确的对象。
我使用这种“设计模式”来避免主对象混乱。在参数中传递属性也会使函数变得混乱,所以我拒绝这样做。此外,这正是bind 的用途。
JSHint 有办法让我这样做吗?
【问题讨论】:
-
这可能是 jshint 中的错误吗?
-
好吧,这可能是严格的违规行为,这是正确的。但是,如果它无法解析
bind问题,我认为它应该仍然是警告,而不是错误。不知道... -
但是就像你提到的那样;这不是错误因为你在调用它之前first绑定了它。让它发出警告可能也没有太大帮助,因为这是
.bind()的预期目的 -
是的...我已经在 jshint 队列中打开了this issue,但也许有一种配置方法可以改变它?这就是我问这个问题的原因:如果可能的话,找到一个解决方法(不要太丑陋)。
-
“这正是
bind的用途” - 好吧,在这里,我猜你可能只想做g.call(this)。 (但不确定它是否能解决问题。)如果你想默认绑定g,你可以改为var g = function() { }.bind(obj),这会阻止jshint抱怨。
标签: javascript jshint