2

我会用一些代码开始它。让我们有一个对象:

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

4

1 回答 1

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);
}
于 2013-08-01T07:46:24.773 回答