对于Firefox扩展程序,我正在尝试执行以下操作:
现在,我将它设置为类:
var Obj = {
field: null,
a: function() { }
b: function() {
Obj.field = 'x';
Obj.a();
}
}
window.addEventListener('mouseup', Obj.b, false);
但似乎应该可以让mod不“从外部”引用对象(例如使用Obj
),而只使用this
。但是,我无法弄清楚如何使其正常工作,将一个简单的函数引用传递给addEventListener()
和(最好)只用一个名称来污染命名空间。那可能吗?我试着谷歌搜索它,发现例如http://ejohn.org/blog/simple-class-instantiation/,但这似乎没有达到符合我干净设置标准的东西。
答案 0 :(得分:3)
使用ES5 bind
功能:
var Obj = {
field: null,
a: function() { }
b: function() {
this.a = 'x';
this.a(); //Note: not sure what you're trying to do, but calling a string like a function won't work.
}
}
window.addEventListener('mouseup', Obj.b.bind(Obj), false);
答案 1 :(得分:3)
bind
绝对是一个很好的方法。但是,请注意addEventListener
方法可以接受实现EventListener接口的对象,而不是函数:
var Obj = {
field: null,
a: function() { },
b: function() {
this.field = 'x'; // if you overrides `a` you can't call it
this.a();
},
handleEvent: function(event) {
switch(event.type) {
case "mouseup":
this.b();
break;
}
}
}
window.addEventListener('mouseup', Obj, false);
如果您有多个与Obj
相关的事件,和/或如果您有多个同一对象的实例(不是您的情况),这将非常有用。