Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать, какому объекту принадлежит свойство, или как найти папу this :) 
:(
    Опции темы
diam
Дата 11.4.2006, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Здравствуйте. Сразу поясню на примере, что я имею в виду.

Код

// создаём конструктор
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;
        }
};

PM MAIL   Вверх
smartov
Дата 11.4.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Код

MyConstructor.prototype.parent


http://phrogz.net/JS/Classes/OOPinJS2.html
PM MAIL   Вверх
diam
Дата 11.4.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Если опираться на
Цитата(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 = ...; // как получить???
};

PM MAIL   Вверх
smartov
Дата 12.4.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



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

ИМХО не получится, так как этот "дочерний" объект_1 (никакой он конечно не дочерний на самом то деле) объект АСБОЛЮТНО ничего не знает о том, где он содержится, разве только для него не написанно специальной функции-аксессора к обьекту, содержащему его.
Если ее нет - значит ее надо написать.
PM MAIL   Вверх
diam
Дата 12.4.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Любопытство берёт своё smile

Да, действительно, не получится. Сколько не искал, ничего не нашёл.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.