Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.02.2012, 15:46
Новичок на форуме
Отправить личное сообщение для SuperDennis Посмотреть профиль Найти все сообщения от SuperDennis
 
Регистрация: 29.02.2012
Сообщений: 3

Передача события обработчику внутри класса
Всем привет.

Пишу игру на JS. Пишу на чистом JS с использованием jQuery для облегчения многих задач. Написал класс для объекта карты Map:

var Map = function (map) {
	this.map = $(map);
};

// Place object on the map
Map.prototype.addObject = function(object_id) {
	this.map.append('<div id="' + object_id + '" />');
};

// Map events handler
Map.prototype.on = function (event, handler) {
	this.map.live(event, function (e) {
		handler(e);
	});
};


Далее создаю карту и хочу реализовать при клике добавление объекта в указанную точку карты (принимаем во внимание, что в body существует элемент <div id="map"></div>):

var map = new Map('#map');

map.on('click', function (e) {
	// Place tower on the map
	this.addObject('tower', {
		'left' : e.pageX,
		'top' : e.pageY
	});
});


Проблема: Хочу реализовать так, чтоб this во втором куске кода указывал на объект моего определенного выше типа Map и соответственно вызывал на нем метод addObject() - как этого можно добиться?

П.С. Ведь в jQuery подобное поведение как-то реализовано...
Ответить с цитированием
  #2 (permalink)  
Старый 29.02.2012, 16:23
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

apply / call
Ответить с цитированием
  #3 (permalink)  
Старый 29.02.2012, 16:36
Новичок на форуме
Отправить личное сообщение для SuperDennis Посмотреть профиль Найти все сообщения от SuperDennis
 
Регистрация: 29.02.2012
Сообщений: 3

Уже нашел такие чудесные изобретения человечества, как .call() и .apply(), все сделал, все работает. Но всё-равно спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 29.02.2012, 16:37
Новичок на форуме
Отправить личное сообщение для SuperDennis Посмотреть профиль Найти все сообщения от SuperDennis
 
Регистрация: 29.02.2012
Сообщений: 3

Кстати, если кому вдруг станет полезно или просто интересно, вот код:

// jQuery .on() analog
Map.prototype.on = function (event, handler) {
	var $this = this;
	this.map.on(event, function (e) {
		handler.call($this, e);
	});
};
Ответить с цитированием
  #5 (permalink)  
Старый 29.02.2012, 16:41
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

// jQuery .on() analog
Map.prototype.on = function (event, handler) {
	this.map.on(event, $.proxy( handler, this) );
};
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача события в родительское окно sancho Events/DOM/Window 0 21.09.2011 22:25
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 07:54
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 16:01
передача переменой класса Hugo_O Общие вопросы Javascript 6 16.06.2010 08:47
Как внутри класса вызвать метод из соседнего метода Shahurik Общие вопросы Javascript 2 13.11.2009 11:20