Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2013, 08:13
Аватар для mil
mil mil вне форума
Новичок на форуме
Отправить личное сообщение для mil Посмотреть профиль Найти все сообщения от mil
 
Регистрация: 06.09.2013
Сообщений: 2

Проблема с вызовом метода
Доброго времени суток друзья.
Проблема вот в чем:
Создаю и инициализирую класс, потом пытаюсь вызвать метод этого класса из события. После вызова метода из события пишет что конструктор не инициализирован 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
	}
};
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2013, 08:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

У тебя контекст вызова метода будет не объект m, а элемент d (его устанавливает браузер). http://learn.javascript.ru/this
Пиши либо m.method1.bind(m), либо function() { m.method1() }
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2013, 08:58
Аспирант
Отправить личное сообщение для _axl Посмотреть профиль Найти все сообщения от _axl
 
Регистрация: 21.07.2009
Сообщений: 39

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);
	}
};
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2013, 10:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

_axl, а если появится второй экземпляр класса MainClass?
Ответить с цитированием
  #5 (permalink)  
Старый 06.09.2013, 14:40
Аватар для mil
mil mil вне форума
Новичок на форуме
Отправить личное сообщение для mil Посмотреть профиль Найти все сообщения от mil
 
Регистрация: 06.09.2013
Сообщений: 2

Сообщение от danik.js Посмотреть сообщение
У тебя контекст вызова метода будет не объект m, а элемент d (его устанавливает браузер). http://learn.javascript.ru/this
Пиши либо m.method1.bind(m), либо function() { m.method1() }
Благодарю за совет, да так все работает, но есть один нюанс.
После того как метод вызван мне в этом методе необходимо обработать другое событие и передать ему метод2(закрывает меню) и там уже никак не сделать что бы все работало и вообще какой то замес выходит... Я подозреваю что у нормальных людей все вообще не так должно работать. Суть моей идеи в том что бы сделать класс для анимированного меню.
Ответить с цитированием
  #6 (permalink)  
Старый 06.09.2013, 14:58
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема метода indexOf() в разных браузерах! Rodger1956629 Javascript под браузер 7 31.07.2013 02:54
Проблема с обработкой метода load Sherminator AJAX и COMET 6 18.04.2013 15:17
Проблема с вызовом функции внутри Ajax Archiolidius jQuery 1 12.12.2012 19:40
Проблема с вызовом функции в качестве обработчика G_M_S Общие вопросы Javascript 5 03.05.2011 11:55
Проблема с вызовом функции! Pacan Общие вопросы Javascript 14 30.11.2010 15:47