我可以创建变量或进行绑定。什么是最好的解决方案?
var object = {
log: function (s) {
console.log(s);
},
run: function () {
var self = this;
setTimeout(
function () {
self.log('test');
}, 1000
);
}
};
object.run();
或:
var object = {
log: function (s) {
console.log(s);
},
run: function () {
setTimeout(
function () {
this.log('test');
}.bind(this), 1000
);
}
};
object.run();
更新: 有很多方法可以决定这一点。兼容性,性能和可读性方面是最重要的。
Function.prototype.bind函数很新,所以在使用前请检查兼容性表。
关于表现最好使用自我。多次调用函数时,bind可能会更好,但这超出了这个问题的范围。
我更喜欢使用bind来提高可读性。
答案 0 :(得分:2)
如果你检查Function.prototype.bind
shim at MDN的来源,你会注意到它在它返回的函数中形成了对几个变量的闭包。
鉴于此,你也可以(恕我直言)利用语言功能,只需关闭你自己需要的变量。你将避免函数调用。
当您不控制正在调用的函数的来源并且需要设置.bind
或者您需要时,使用this
非常有用提供额外的参数。
答案 1 :(得分:0)
没有真正的"最佳解决方案"这里;两种选择都有效。我个人喜欢var self = this;因为代码不那么冗长,通常符合目的。
然而正如Dan Lee所述:Function.prototype.bind is not compatible through all browsers。
也许您可以使用underscore bind 或jQuery proxy。