在 JavaScript 中传递绑定对象方法
Passing a bound object method in JavaScript
对于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/,但这似乎并没有导致符合我的干净设置标准的东西。
使用 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);
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
相关的事件,和/或您有多个同一对象的实例(不是您的情况),这会很有用。
相关文章:
- 如果数据绑定对象只有它的名称,那么敲除如何知道它
- 如何使用普通js绑定对象以更新值
- Knockoutjs 绑定对象问题
- 如何将 require('') 对象传递到绑定对象的作用域中
- 如果 ajax 刷新了绑定对象,则 .submit 不起作用
- 角度无意绑定/对象镜像
- 在 JavaScript 中传递绑定对象方法
- 循环绑定对象
- 我应该如何在ng重复中绑定对象的值
- Knockout js:用于绑定对象而不是单个值的代码
- Paper.js Z索引和绑定对象
- AngularJS-绑定对象列表
- 如何在指令的link函数中对绑定对象做出反应
- 事件创建中的Javascript绑定对象
- 删除元素时是否需要清除绑定对象?
- 为绑定对象添加属性
- javascript绑定对象's原型函数
- AngularJS用复选框绑定对象
- 有没有可能保护'this'引用绑定对象内的函数
- Angular绑定对象元素到HTML