Javascript.RU

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

Получение ссылки на объект из метода
Здравствуйте.
Столкнулся с такой ситуацией: от функции к функции передается анонимный объект с большим количеством методов, для более упорядоченной структуры, методы помещены внутрь атрибутов этого объекта, например:
function Test() {
	this.str = 'test';
}

Test.prototype = {
	fn1: function() {
		alert(this.str);
	},
	fn: {
		fn2: function() {
			alert('????');
		}
	}
};

new Test().fn.fn2();

как в этом случае в функции fn2 получить ссылку на родительский объект и добраться до его атрибута str?
Ответить с цитированием
  #2 (permalink)  
Старый 21.08.2008, 09:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

function Test() {
    this.str = 'test';
}
 
Test.prototype = {
    fn1: function() {
        alert(this.str);
    },
    fn: {
        var self = this;
        fn2: function() {
            alert(self.str);
        }
    }
};
 
new Test().fn.fn2();
Ответить с цитированием
  #3 (permalink)  
Старый 21.08.2008, 09:38
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Kolyaj, там объект, а не функция.
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2008, 10:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Snipe, и правда, не прокатит.
Ответить с цитированием
  #5 (permalink)  
Старый 21.08.2008, 11:18
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

так не делать и всё будет ОК
Ответить с цитированием
  #6 (permalink)  
Старый 21.08.2008, 13:21
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Эх, такая была удобная конструкция, видимо придется переделывать :-(
Всеравно как-то не верится, что в JavaScript нет специальных средств типа «this», «constructor» и «arguments.callee», чтобы добраться до«верхнего» родительского объекта.

Последний раз редактировалось Octane, 21.08.2008 в 13:37.
Ответить с цитированием
  #7 (permalink)  
Старый 21.08.2008, 13:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Хм, а если делать вот так:
function Test() {
  this.str = 'test';
}
 
Test.prototype = {
  fn1: function() {
    alert(this.str);
  },
  fn: {
    self: function(obj) {
      return obj;
    }(this),
    fn2: function() {
      alert(this.self.str);
    }
  }
};
 
new Test().fn.fn2();

Только в self теперь записывается ссылка на window
Ответить с цитированием
  #8 (permalink)  
Старый 21.08.2008, 15:09
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Лично я использую вложенные объекты, как удобную иерархическую структуру данных. А завязывать как-то функционал ООП на ней неполучается, да и это лишнее, помоему.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с формированием ссылки AnGor Общие вопросы Javascript 0 27.08.2008 17:53