呼叫/应用是否优于传递上下文?

时间:2013-08-01 07:40:22

标签: javascript

我将用一些代码开始。我们有一个对象:

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解决。那么毕竟不需要传递上下文吗?

1 个答案:

答案 0 :(得分:1)

对你的问题不是一个完整的答案,但至于你的最后一个例子,还有第三种方法。就像你猜对了,你不能真正使用call / apply,但你可以使用bindhttps://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);
}