Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > как узнать, какому объекту принадлежит свойство


Автор: diam 11.4.2006, 08:22
Здравствуйте. Сразу поясню на примере, что я имею в виду.

Код

// создаём конструктор
MyConstructor = function() {
        this.x = 5;
};

// создаём объект
var myObj = new MyConstructor();

// в данном случае объект myObj - одно из свойств объекта window,
// обращаться к нему можно так:
alert(myObj.x);
alert(window["myObj"].x);

// можно даже придумать метод, используя который мы можем получить название
// объекта this:
MyConstructor.prototype.getThisName = function() {
        for(var key in window) {
                if(window[key] == this) return key;
        }
};
alert(myObj.getThisName());


// пока всё хорошо, идём дальше, создаём
myObj.newObj = new MyConstructor();

// теперь у объекта myObj есть новое свойство newObj, которое является объектом,
// созданным нашим же конструктором MyConstructor.
// Объект newObj уже является свойством объекта myObj, а не объекта window.
// Поэтому вызов метода getThisName для объекта myObj.newObj вернёт undefined
alert(myObj.newObj.getThisName());


Вопрос: как узнать, кто является "объектом-папой", что бы переписать функцию getThisName на что-то подобное:
Код

MyConstructor.prototype.getThisName = function() {
        for(var key in "объект-папа") {
                if("объект-папа"[key] == this) return key;
        }
};

Автор: smartov 11.4.2006, 15:10
Код

MyConstructor.prototype.parent


http://phrogz.net/JS/Classes/OOPinJS2.html

Автор: diam 11.4.2006, 23:43
Если опираться на
Цитата(smartov @ 11.4.2006, 18:10 Найти цитируемый пост)
http://phrogz.net/JS/Classes/OOPinJS2.html
, то MyConstructor.prototype.parent помогает нам только в том случае, когда мы сами указываем предка.

Мы так же можем написать такой конструктор:
Код

MyConstructor = function(parent) {
        this.parent = parent || window;
};

// и использовать его так
var obj = new MyConstructor();
obj.obj = new MyConstructor(obj);


Но это не решение. Переозвучу вопрос:
1. Есть конструктор.
2. Он используется в "библиотеке" - подключаемом файле js.
3. Необходимо получить ссылку на объект, свойством которого является вновь созданный нашим конструктором объект, без передачи объекта-предка в качестве параметра функции-конструктору и без установки этого объекта вручную программистом.
Код

MyConstructor = function(parent) {
        this.parent = ...; // как получить???
};

Автор: smartov 12.4.2006, 10:50
То есть ты хочешь из объекта_1 который является не наследником а всего лишь полем-свойством объекта_2 получить этот самый объект_2?

ИМХО не получится, так как этот "дочерний" объект_1 (никакой он конечно не дочерний на самом то деле) объект АСБОЛЮТНО ничего не знает о том, где он содержится, разве только для него не написанно специальной функции-аксессора к обьекту, содержащему его.
Если ее нет - значит ее надо написать.

Автор: diam 12.4.2006, 19:09
Любопытство берёт своё smile

Да, действительно, не получится. Сколько не искал, ничего не нашёл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)