我会用一些代码开始它。让我们有一个对象:
function SomeObject() {
this.arbitraryVarINeed = 5;
}
现在一种方法是:
SomeObject.prototype.stuffToBeDone() {
var context = this;
function heyThere() {
console.log(context.arbitraryVarINeed);
}
heyThere();
}
和另外一个:
SomeObject.prototype.stuffToBeDone() {
function heyThere() {
console.log(this.arbitraryVarINeed);
}
heyThere.call(this);
}
现在在这个简单的例子中,显然 call 会更可取。但是这个怎么样, .call/.apply 甚至适用吗?
SomeObject.prototype.stuffToBeDone() {
var hello = document.createElement("brofist");
var context = this;
hello.onBroEvent = function (event) {
event.target.innerBro = context.arbitraryVarINeed;
}
}
如果我必须在重复使用 .call/.apply 或只是保存保存在某处的上下文之间进行选择,我应该选择前者还是后者?什么是快速的选择,安全的选择,这两种方法中的一种是否比另一种更好?
事实证明,感谢 Jakob 的回答,事件/匿名函数示例也可以通过 .bind 解决。那么毕竟绝对不需要传递上下文吗?