如果我在onkeypress外部调用killSwitch(),我会导致一个错误。但在onkeypress函数中,我工作得很好。为什么?
// this works fine
var ClassA = function()
{
var doc = document;
// killSwitch();
doc.onkeypress = function(e){ killSwitch(); }
this.killSwitch = function(){ alert('hello world'); }
}
var myClass = new ClassA();
发布于 2010-05-21 20:39:07
您不能调用killSwitch
,因为您已将该方法定义为对象实例(this.killSwitch
)的属性。
您不能在keypress
事件中使用this
,因为它将引用document
,您必须存储this
值:
var ClassA = function() {
var doc = document,
instance = this; // store reference to `this`
doc.onkeypress = function(e){ instance.killSwitch(); };
this.killSwitch = function(){ alert('hello world'); };
}
var myClass = new ClassA();
发布于 2010-05-21 20:39:36
尝试:
var ClassA = function()
{
var doc = document;
var killSwitch = function(){ alert('hello world'); };
killSwitch();
doc.onkeypress = function(e){ killSwitch(); }
this.killSwitch = killSwitch
}
var myClass = new ClassA();
这样,您就可以在ClassA
函数内部定义killSwitch
函数,创建一个闭包,并且它在类内和类外都可用。
https://stackoverflow.com/questions/2885387
复制