【发布时间】:2013-10-30 09:51:22
【问题描述】:
我可以创建一个变量或绑定。什么是最好的解决方案?
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 函数比较新,使用前请查看兼容性表。
关于性能最好使用 self.多次调用函数时,bind 可能会更好,但这超出了本问题的范围。
我更喜欢 bind 以提高可读性。
【问题讨论】:
-
你说的最好是什么意思?两种解决方案都有效,并且会产生相同的结果。
-
难道没有什么可以让一个比另一个更好吗?
-
再一次,更好是什么意思?可读性?性能?
-
偏爱其中一个的理由是什么?所有这些原因如何加起来?
-
Function.prototype.bindis not compatible through all browsers。所以这取决于你在乎什么。