Я пытаюсь получить доступ к переменным-членам класса прототипа в JavaScript в обработчике событий - то, что я обычно использовал для этого ключевого слова для (или «that» [копия этого] в случае обработчиков событий). Излишне говорить, что у меня проблемы.«this» ключевое слово в методах событий при использовании объекта прототипа JavaScript
Возьмем, к примеру, этот HTML фрагмент:
<a id="myLink" href="#">My Link</a>
И этот JavaScript код:
function MyClass()
{
this.field = "value"
this.link = document.getElementById("myLink");
this.link.onclick = this.EventMethod;
}
MyClass.prototype.NormalMethod = function()
{
alert(this.field);
}
MyClass.prototype.EventMethod = function(e)
{
alert(this.field);
}
Инстанцирование объект MyClass и вызов NormalMethod работает точно так же, как я ожидать, что это (предупреждение говоря " value "), но нажатие ссылки приводит к неопределенному значению, потому что ключевое слово this это ссылка на объект назначения (элемент HTML anchor()).
Я новичок в прототип JavaScript стиль, но в прошлом, с закрытием, я просто сделал копию «это» в конструкторе:
var that = this;
И тогда я мог бы получить доступ к членам переменные в методах событий через объект «тот». Это не похоже на прототип кода. Есть ли другой способ достичь этого?
Спасибо.
Вы со ссылкой на библиотеку Prototype или, вернее, прямо JavaScript прототипов классов? –
Отвечая на три года позже :) Но для потомков: я имел в виду прямые прототипы классов JavaScript. – Michael
Возможный дубликат [Как получить доступ к правильному 'this'/context внутри обратного вызова?] (Http://stackoverflow.com/q/20279484/1048572)? – Bergi