Javascript.RU

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

Доступность имен полей функций
Имеется код:
function foo(domId)
{
 this.container = document.getElementById(domId);
}

foo.prototype =
{
 f1: function()
 {
  var btn = document.createElement('INPUT');
  btn.setAttribute('type','button');
  btn.setAttribute('value','Button 1');
  btn.onclick = this.f2;
  this.container.appendChild( btn ); // кнопка успешно добавляется
 },
 f2: function()
 {
  alert(this.container); // "undefined" ?!!
 }
}

var ff = new foo('block1');
ff.f1();


Вопрос: почему container не доступен в f2 и как это исправить?
Т.е. какие тут имеются пространства имен (наверное вопрос в этом)?
Ответить с цитированием
  #2 (permalink)  
Старый 08.05.2012, 22:55
z4p z4p вне форума
Новичок на форуме
Отправить личное сообщение для z4p Посмотреть профиль Найти все сообщения от z4p
 
Регистрация: 08.05.2012
Сообщений: 4

Нашел решение: вместо
this.container = document.getElementById(domId);

в конструкторе писать
foo.prototype.container = document.getElementById(domId);

Вроде this не относится к прототипу функции, а только к контексту её вызова.
Ответить с цитированием
  #3 (permalink)  
Старый 08.05.2012, 23:17
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вызывает то функцию f2 обработчик событий, поэтому и не доступен функции старый контекст

оберните вызов события в функцию:
var self = this;
btn.onclick = function() {
    self.f2.apply( self, arguments );
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 08.05.2012 в 23:20.
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2012, 12:59
z4p z4p вне форума
Новичок на форуме
Отправить личное сообщение для z4p Посмотреть профиль Найти все сообщения от z4p
 
Регистрация: 08.05.2012
Сообщений: 4

Благодарю, мне эта мысль (сохранение текущего контекста) бы в голову и не пришла, хотя ответ и на поверхности)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение полей $wAiN_n Общие вопросы Javascript 6 08.04.2011 17:49
Проблема с проверкой полей в форме Eth Общие вопросы Javascript 7 19.08.2010 17:41
Добавление и удаление полей в форму anoth3r Events/DOM/Window 1 11.09.2009 15:10
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14