如果我在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();
// 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();
答案 0 :(得分:4)
您无法调用killSwitch
,因为您已将该方法定义为对象实例的属性(this.killSwitch
)。
您无法在this
事件中使用keypress
,因为它会引用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();
答案 1 :(得分:0)
尝试:
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();
这样你就可以在killSwitch
函数中定义ClassA
函数,创建一个闭包,它在类内外都可用。