我添加了一个指向当前对象方法的事件侦听器。因为this
的上下文丢失了,所以我将该方法绑定了。根据我的理解,.bind(this)
creates a new bound function,这意味着删除事件监听器,我必须将绑定函数保留在变量中以备将来使用。
MyObject.prototype.addListener = function () {
var checkAnchorBound = this.checkAnchor.bind(this);
//anAnchorElement points to an anchor tag on the page
this.anAnchorElement.addEventListener("click", checkAnchorBound);
}
现在,每当我点击那个锚点,checkAnchor就会运行,一切运行完美。问题是删除事件侦听器,因为需要在this.removeListener
调用this.checkAnchor
内删除该事件侦听器。这意味着我无法将绑定函数作为参数传递。
MyObject.prototype.removeListener = function (event) {
//I cannot pass checkAnchorBound from MyObject.addListener as parameter
this.anAnchorElement.removeEventListener("click", checkAnchorBound);
}
我尝试在对象中存储checkAnchorBound
,因此我不必将变量作为参数传递:
MyObject.prototype.addListener = function () {
this.checkAnchorBound = this.checkAnchor.bind(this);
//anAnchorElement points to an anchor tag on the page
this.anAnchorElement.addEventListener("click", this.checkAnchorBound);
}
但是,addEventListener
不再有效。有没有办法将checkAnchorBound
作为参数传递,即使我的侦听器是绑定函数?如果没有,有没有办法可以将绑定函数存储在MyObject
?