Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2013, 18:25
Новичок на форуме
Отправить личное сообщение для oxotnik.na.orlov Посмотреть профиль Найти все сообщения от oxotnik.na.orlov
 
Регистрация: 24.04.2013
Сообщений: 3

Передать параметр в функцию, назначить ее на событие. Как?
Привет!
Я только недавно начал изучать JS и вот сегодня столкнулся с такой проблемой. Сижу над ней целый день, выручайте

<body>
<script>
	
	Transformer = function() {
		this.name = "Optimus";
	};
	
	Transformer.prototype.getName = function() {
		return this.name;
	};
	
	Informer = function(transformer, rootObject) {
		this.robot = transformer;
		rootObject.innerHTML = '<input id="btn" type="button" value="Push"/>';
		document.getElementById('btn').onclick = this.sayName;
	};
	
	Informer.prototype.sayName = function() {
		alert(this.robot.getName());
	};
	
	var trans = new Transformer();
	var inform = new Informer(trans, document.body);
	
</script>
</body>


Нужно, чтобы по нажатию на кнопку появлялся алерт с текстом "Optimus". Вместо этого получаю this.robot = unidentified по событию onclick. Предполагаю, что проблема кроется в областях видимости this, но хотелось бы ясности.
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2013, 18:36
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от oxotnik.na.orlov
alert(this.robot.getName());
кто такой robot?

Последний раз редактировалось dmitriymar, 24.04.2013 в 18:41.
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2013, 20:21
Новичок на форуме
Отправить личное сообщение для oxotnik.na.orlov Посмотреть профиль Найти все сообщения от oxotnik.na.orlov
 
Регистрация: 24.04.2013
Сообщений: 3

Сообщение от dmitriymar Посмотреть сообщение
кто такой robot?
Поле класса Informer, не?
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2013, 21:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от oxotnik.na.orlov
хотелось бы ясности
Все просто. sayName будет вызван с this, указывающим на элемент - источник события, короче кнопку.
Можно сразу привязать функцию к нужному контексту:
this.sayName.bind(this)

Не будет работать в старых браузерах, гугли решение проблемы сам.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2013, 21:40
Новичок на форуме
Отправить личное сообщение для oxotnik.na.orlov Посмотреть профиль Найти все сообщения от oxotnik.na.orlov
 
Регистрация: 24.04.2013
Сообщений: 3

danik.js,
Большое Вам спасибо.
Задача решена преобразованием 15-ой строки к виду:
document.getElementById('btn').onclick = this.sayName.bind(this);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запомнить id выбранного элемента и передать его как параметр в адресную строку georg Элементы интерфейса 1 09.03.2013 10:57
Flot Как передать переменную в функцию отрисовки точки на графике Ren jQuery 0 20.06.2012 14:16
Как передать в функцию значение а не ссылку на переменную? Ghaniball Общие вопросы Javascript 4 02.09.2011 18:24
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 02:11