Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2013, 17:19
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

проблема с this
Здравстуйте, суть проблемы в следующем:
есть такой код:
var tools = {
		index: 1,
		nextOne: document.getElementById('next')
	},
		
	f = (function() {
		function F(tools) {
			this.index = 1;
		};
		
		F.prototype.someMethod = function() {
			tools.nextOne.onclick = function() { 
				alert(this.index);
			};	
		};
		
		return new F();		
	})();

	f.someMethod.apply(f, []); // undefined
не могу понять почему при вызове метода someMethod с явно указанным контекстом все равно выводится undefined ??
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2013, 17:52
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

this в данном случае указывает на объект до точки, если хочешь получить 1, то делай ссылку на объект типа var self = this, вида
F.prototype.someMethod = function() {
var self = this
и внутри onclick вызывай alert(self.index);
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2013, 18:01
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

Сообщение от jsru_ Посмотреть сообщение
если хочешь получить 1, то делай ссылку на объект типа var self = this, вида
F.prototype.someMethod = function() {
var self = this
так это понятно, но что если методов в прототипе будет скажем штук 15, не писать же в каждом из них по
var self = this;
Повторение кода получается =)
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2013, 18:07
Аватар для jsru_
Кандидат Javascript-наук
Отправить личное сообщение для jsru_ Посмотреть профиль Найти все сообщения от jsru_
 
Регистрация: 09.04.2013
Сообщений: 149

то ты не можешь понять почему , а теперь пишешь "так это понятно" , определись уже; если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.
Ответить с цитированием
  #5 (permalink)  
Старый 21.11.2013, 18:29
Аватар для Arramis
Кандидат Javascript-наук
Отправить личное сообщение для Arramis Посмотреть профиль Найти все сообщения от Arramis
 
Регистрация: 22.07.2013
Сообщений: 104

Сообщение от jsru_ Посмотреть сообщение
то ты не можешь понять почему , а теперь пишешь "так это понятно" , определись уже; если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.
извиняюсь, не корретктно сформулировал проблему, да я хочу в любом месте класса иметь доступ к будущему объекту.
Сообщение от jsru_ Посмотреть сообщение
если ты хочешь чтоб твой this в любом участке класса указывал на функцию конструктор, создай метод в объекте F getSelf = function () { return this; } и вызывай его когда нужен корректный this.
и что это даст ? разницы никакой, this будет правльным, но опять будет сплошное повторение кода.
Здесь без магии не обойтись походу
Ответить с цитированием
  #6 (permalink)  
Старый 21.11.2013, 20:58
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

F.prototype.someMethod = function() {
    tools.nextOne.onclick = function() { 
        alert(this.index);
    }.bind(this);	
};
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема с обработкой ескольких .hover() anocean jQuery 3 15.06.2012 22:43
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47