Доступ к переменной экземпляра внутри функции в JavaScript? - PullRequest
4 голосов
/ 30 июня 2011

Как мне проще всего получить доступ к переменной экземпляра внутри функции?

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 Ответ

10 голосов
/ 30 июня 2011
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();

Если вы присваиваете эту переменную в области видимости внешней функции, она передается в цепочку областей видимости внутренних функций. Внутри вашей внутренней функции ссылка ссылается на внутреннюю функцию, ссылается на переменную, которую вы присвоили this, в нашем случае «that» ссылается на этот объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...