2010-05-21 21 views
1

如果我在onkeypress之外調用killSwitch(),則會導致錯誤。 但是在onkeypress函數中,我工作得很好。 爲什麼?javascript調用特權方法

// 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(); 

回答

4

你不能叫killSwitch,因爲你所定義的方法,對象實例(this.killSwitch)的屬性。

不能使用thiskeypress事件中,因爲這將涉及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(); 
+0

老鼠,你擊敗了我30秒! +1,很好的答案 – Josh 2010-05-21 20:40:03

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(); 

這樣你定義ClassA函數中的killSwitch函數,創建閉包,並且在課堂內外都可用。