如何在初始化函数中向事件侦听器添加原型函数
How can I add a prototype function to an event listener in the initialization function?
我不确定如何表达我的问题,所以让我举一个例子:
function foo() {
window.addEventListener("keydown", function(event) {
bar(event.keycode);
}
foo.prototype.bar = function (keycode) {
//code
}
我尝试使用this.bar()
,但这会导致将window
用作this
。有没有办法做到这一点,还是我必须手动调用另一个初始化方法?
在传递之前将this.bar
绑定到this
。
function foo() {
window.addEventListener("keydown", this.bar.bind(this), false);
}
foo.prototype.bar = function (event) {
console.log(event.keyCode);
}
演示 http://jsfiddle.net/2tee4/
如果您
没有可用的Function.prototype.bind
*,并且您不愿意向Function.prototype
添加额外的函数,另一种解决方案是关闭对this.bar
的调用:
function foo() {
var self;
self = this;
window.addEventListener('keydown', function (e) {
self.bar(e);
}, false);
}
foo.prototype.bar = function (e) {
console.log(e.keyCode);
}
*尽管您在没有attachEvent
的情况下使用addEventListener
使我相信Function.prototype.bind
将是一个可以接受的选择
此外,诸如jQuery
库可以包含自己的bind
形式,jQuery的jQuery.proxy
。
如果您打算为每个创建的foo
添加新侦听器,另一个选项是foo
实现 EventListener 接口,并简单地传递this
来代替处理程序。
function Foo() {
window.addEventListener("keydown", this, false);
}
Foo.prototype.bar = "foobar";
Foo.prototype.handleEvent = function(e) {
console.log(e.type); // "mousedown" (for example)
console.log(this.bar); // "foobar"
};
new Foo();
请注意,这仅适用于 addEventListener()
。
演示:http://jsfiddle.net/k93Pr/
相关文章:
- 双条件jQuery函数事件
- 将函数事件绑定到更改函数的复选框/标签
- 从c#代码后面触发jQuery函数/事件
- 正在解码函数(事件){}的JavaScript语法
- 如何防止我的$('form').submit(函数(事件))应用于某些表单
- 访问PDF.js查看器函数/事件
- 从内部调用 JavaScript 函数事件
- JavaScript/jQuery调用函数事件
- jquery.live('点击',函数(事件)在页面加载时只工作一次
- 如何在JavaScript中跟踪回调函数事件
- 正确删除匿名函数事件处理程序
- jQuery:将 $(this) 传递给命名函数事件处理程序
- 函数(事件)变量是否可以不永久更改实例变量的内容
- Javascript函数事件没有按顺序触发
- 如何按类循环函数事件
- jQuery与对象的绑定函数'事件处理程序
- 函数(事件)在一个Opera上下文菜单扩展
- 用meteor.js响应式调用js函数/事件
- 缩短JavaScript函数事件
- 将onchange函数事件附加到变量