【发布时间】:2012-07-12 21:47:00
【问题描述】:
刚刚在我的 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 类型的预期对象发出警报。
但是,根据this table,如果我使用bind(),一堆浏览器将无法正常运行。我一直在阅读apply() 和call(),但它们似乎适用于有论据的情况。在这种情况下,如何使用 pre-ECMAScript5 方法实现我需要的 bind() 行为?
【问题讨论】:
-
ejohn.org/apps/learn(点击“我们的目标”然后点击下一步。你会在那里看到答案。)另见developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…。
-
酷豆人 - 非常有帮助。很高兴接受作为解决方案。
标签: javascript binding this ecmascript-5