Рассмотрим следующий класс Javascript:
function ClassA() {
this.someVariable = someValue;
this.myHandler = function(){
// I WANT TO CALL InnerFunction
this.innerFunction();
};
this.innerFunction = function(){
// do something that accesses/manipulates someVariable
};
this.hookUp = function(id){
document.getElementById(id).onclick = this.myHandler;
};
};
...
...
var button = document.createElement('button');
button.setAttribute('id','mybuttonid');
// append button to the document
...
...
var x = new ClassA();
x.hookUp('mybuttonid');
Когда я нажимаю кнопку, обработчик выполняется, однако «это» теперь относится к элементу кнопки, а не к объекту ClassA, поэтому он не может разрешить innerFunction().
Что мне нужно, так это способ указать обработчику, что контекст this является экземпляром ClassA (аналогично $.ajax({context: this....}), где вы можете использовать 'this' в . done() или .error()), или способ передать ссылку на экземпляр обработчику, не заставляя обработчик выполняться во время создания экземпляра. Например, если я попытаюсь передать «это» в качестве параметра myHandler (myHandler=function(ref){}, а затем изменить: document.getElementById(id).onclick = this.myHandler(this);) Но когда вы добавите параметры для myHandler, функция выполняется во время создания экземпляра класса, а не во время клика.
Любая помощь будет оценена.
this.someVariableпопробуйте просто использоватьvar someVariable.someVariableбудет доступно только в рамках функции, поэтомуthisне нужно. Кроме того, в JavaScript нет такой вещи, как классы, поэтому ваша идея использоватьthisможет быть ошибочной. - person Ian Walker-Sperber   schedule 28.10.2013