2011-06-30 45 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;转让,看看我注意到两个地方通知变化的意见。 –