我将用一些代码开始。我们有一个对象:
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 / .apply甚至适用?
SomeObject.prototype.stuffToBeDone() {
var hello = document.createElement("brofist");
var context = this;
hello.onBroEvent = function (event) {
event.target.innerBro = context.arbitraryVarINeed;
}
}
如果我必须在重复使用.call / .apply之间做出选择,或者只是将保存的上下文保存在某个地方,我应该选择前者还是后者?什么是快速选项,安全选项,是两种方法中的一种比另一种更好?
由于雅各布的回答,事件/ anon函数示例也可以通过.bind解决。那么毕竟不需要传递上下文吗?
答案 0 :(得分:1)
对你的问题不是一个完整的答案,但至于你的最后一个例子,还有第三种方法。就像你猜对了,你不能真正使用call
/ apply
,但你可以使用bind
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
像这样:
SomeObject.prototype.stuffToBeDone() {
var hello = document.createElement("brofist");
var context = this;
hello.onBroEvent = (function(event) {
event.target.innerBro = this.arbitraryVarINeed;
}).bind(this);
}