在javascript中的函数内访问实例变量?

时间:2011-06-30 17:03:39

标签: javascript oop

如何以最简单的方式访问函数内的实例变量?

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也会发生变化吗?

1 个答案:

答案 0 :(得分:10)

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,则将其传递给内部函数作用域链。在你的内部函数中,引用它指的是内部函数,引用你赋给它的变量,在我们的例子中,“that”,引用回那个对象。