刚刚在我的 Javascript 世界的边缘遇到了一个绑定问题,所以我将按照 Regis 的建议进行讨论,然后提出我的问题:
function foo() {
document.body.addEventListener("click", this.bar);
}
foo.prototype.bar = function(evt) {
alert(this);
}
test = new foo();
这会向document.body
元素发出警报,因为this
由于函数引用而丢失了。因此,引用必须用于bind()
持久化引用:
function foo() {
document.body.addEventListener("click", this.bar.bind(this));
}
这会警告类型为预期的对象foo
。
但是,根据这张表,如果我使用bind()
. 我一直在阅读apply()
,call()
但它们似乎适用于有争议的情况。bind()
在这种情况下,如何使用 pre-ECMAScript5 方法实现我需要的行为?