javascript调用特权方法

时间:2010-05-21 20:36:20

标签: javascript

如果我在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();

2 个答案:

答案 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函数,创建一个闭包,它在类内外都可用。