2011-06-30 90 views
3

如何以最簡單的方式訪問函數內的實例變量?訪問JavaScript中的函數內的實例變量?

function MyObject(){ 

    //Instance variables 
    this.handler; 

    //Methods 
    this.enableHandler = function(){ 
     var button = document.getElementById('button'); 
     button.onclick = function(){ 
      this.handler();//Is not working 
     } 
    } 

} 
var myObject = new MyObject(); 
myObject.handler = function(){ 
    alert('Hello World!'); 
} 
myObject.enableHandler(); 

請注意,我可以設置button.onclick = this.handler;。這只是一個例子。主要問題是如何在該功能中訪問this.handler

我也可以定義一個新變量var handler = this.handler來訪問this.handler。但如果變更handler也會this.handler被更改?

+2

你提到jQuery,但我沒有看到你使用它... –

回答

9
function MyObject(){ 

    //Instance variables 
    this.handler; 
    var that = this; //notice change 
    //Methods 
    this.enableHandler = function(){ 
     var button = document.getElementById('button'); 
     button.onclick = function(){ 
      that.handler();//Is not working notice the change 
     } 
    } 

} 
var myObject = new MyObject(); 
myObject.handler = function(){ 
    alert('Hello World!'); 
} 
myObject.enableHandler(); 

如果將此屬性賦值給外函數範圍內的var,它將被傳遞給內函數作用域鏈。在你的內部函數中,引用this指的是內部函數,引用你賦予它的變量,在我們的例子「that」中,引用該對象。

+0

好吧,如果我改變'thathandler'' this.handler'也會被改變嗎? – einstein

+0

是的,但你也需要做var = this;轉讓,看看我注意到兩個地方通知變化的意見。 –