Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с вызовом метода (https://javascript.ru/forum/misc/41259-problema-s-vyzovom-metoda.html)

mil 06.09.2013 08:13

Проблема с вызовом метода
 
Доброго времени суток друзья.
Проблема вот в чем:
Создаю и инициализирую класс, потом пытаюсь вызвать метод этого класса из события. После вызова метода из события пишет что конструктор не инициализирован a= undifined
Заранее благодарю всех.
window.onload = init;

function init() {
	var m = new MainClass('a');
	var d = document.getElementById("menu_01");
	d.addEventListener("mouseover", m.method1, false);
}

function MainClass(a) {
	this.a = a;
}

MainClass.prototype = {
	constructor: MainClass,
	
	method1: function() {
		console.log('a=', this.a); // тут проблема a= undifined
	}
};

danik.js 06.09.2013 08:53

У тебя контекст вызова метода будет не объект m, а элемент d (его устанавливает браузер). http://learn.javascript.ru/this
Пиши либо m.method1.bind(m), либо function() { m.method1() }

_axl 06.09.2013 08:58

window.onload = init;

function init() {
	var m = new MainClass('a');
	var d = document.getElementById("menu_01");
	d.addEventListener("mouseover", m.method1, false);
}

function MainClass(a) {
	MainClass.a = a;
}

MainClass.prototype = {
	constructor: MainClass,
	
	method1: function() {
		console.log('a=', MainClass.a);
	}
};

danik.js 06.09.2013 10:46

_axl, а если появится второй экземпляр класса MainClass?

mil 06.09.2013 14:40

Цитата:

Сообщение от danik.js (Сообщение 271107)
У тебя контекст вызова метода будет не объект m, а элемент d (его устанавливает браузер). http://learn.javascript.ru/this
Пиши либо m.method1.bind(m), либо function() { m.method1() }

Благодарю за совет, да так все работает, но есть один нюанс.
После того как метод вызван мне в этом методе необходимо обработать другое событие и передать ему метод2(закрывает меню) и там уже никак не сделать что бы все работало и вообще какой то замес выходит... Я подозреваю что у нормальных людей все вообще не так должно работать. Суть моей идеи в том что бы сделать класс для анимированного меню.

danik.js 06.09.2013 14:58

Цитата:

Сообщение от mil
После того как метод вызван мне в этом методе необходимо обработать другое событие

Метод будет вызван по событию mouseover. В этот момент не может произойти "другое событие". События всегда происходят последовательно, а не параллельно.


Часовой пояс GMT +3, время: 22:55.