Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение ссылки на объект из метода (https://javascript.ru/forum/misc/1595-poluchenie-ssylki-na-obekt-iz-metoda.html)

Octane 21.08.2008 00:25

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

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

new Test().fn.fn2();

как в этом случае в функции fn2 получить ссылку на родительский объект и добраться до его атрибута str?

Kolyaj 21.08.2008 09:24

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();

Snipe 21.08.2008 09:38

Kolyaj, там объект, а не функция.

Kolyaj 21.08.2008 10:56

Snipe, и правда, не прокатит.

ZoNT 21.08.2008 11:18

так не делать и всё будет ОК

Octane 21.08.2008 13:21

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

Octane 21.08.2008 13:44

Хм, а если делать вот так:
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 :(

Андрей Параничев 21.08.2008 15:09

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


Часовой пояс GMT +3, время: 18:26.