假设我有一个像这样的JavaScript类:
Foo.prototype = {
init: function() {
$(document).keydown(function(event) {
this.onKeyDown(event);
});
}
onKeyDown: function(event) {
alert("bar");
}
}
myObj = new Foo();
myObj.init();
此代码不起作用,因为在
中$(document).keydown(function(event) {
this.onKeyDown(event);
});
'this'当然是未知的,并没有解决这个问题。我怎么能解决Foo-Class的onkeydown方法?
我不希望用'myObj'(对象的名称)交换'this',因为我可能想将该类用于其他对象。
感谢您的帮助!
答案 0 :(得分:4)
将其存储在变量中......
Foo.prototype = {
init: function() {
var self = this
$(document).keydown(function(event) {
self.onKeyDown(event);
});
}
}
或使用jQuery.proxy
返回this
值绑定的函数...
Foo.prototype = {
init: function() {
$(document).keydown( $.proxy(function(event) {
this.onKeyDown(event);
}, this) );
}
}
或者您可以使用Function.prototype.bind
,但是您需要为旧浏览器修补它。
Foo.prototype = {
init: function() {
$(document).keydown( (function(event) {
this.onKeyDown(event);
}).bind(this) );
}
}
.bind()
的