我正在製作一款遊戲,我想抽象出我的UI,並根據各種遊戲狀態綁定解綁事件。但我不明白爲什麼這個事件沒有被刪除。看起來範圍在處理程序中是正確的。爲什麼removeeventlistener在此對象上下文中不起作用?
相關(精簡)JS:
var controls = {
game : {
el : null,
cb : null,
bind : function(el, cb) {
this.el = el;
this.cb = cb;
this.el.addEventListener('click', this.handler.bind(this), true);
},
unbind : function() {
console.log('unbind');
this.el.removeEventListener('click', this.handler, true);
},
handler : function() {
this.cb();
this.unbind();
}
}
};
var manager = {
init : function() {
var c = document.getElementById('c');
controls.game.bind(c, this.action.bind(this));
},
action : function() {
console.log('c clicked');
}
};
manager.init();
可是如果我刪除事件這樣它的工作原理:
(...)
bind : function(el, cb) {
this.el = el;
this.cb = cb;
var self = this;
this.el.addEventListener('click', function() {
self.cb();
self.el.removeEventListener('click', arguments.callee, true);
}, true);
}
(...)
感謝
酷!感謝您及時的回覆。我不知道.bind創建一個新的功能。 :) – 2013-04-04 19:01:11
非常有幫助謝謝! – 2015-05-11 17:41:30
爲什麼不呢? - > this.el.addEventListener('click',this.handler.bind(this),true);和this.el.removeEventListener('click',this.handler.bind(this),true); – 2016-02-25 09:40:59