[英]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);
}
如果你沒有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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.