![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Се ля ви |
|
||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
Нужно получить список переменных, которые доступны в некотором месте программы.
Если это место - базовый контекст - window - то всё в порядке: все переменные, будь они объявлены хоть с, хоть без ключевого слова var, нам легко доступны:
, ну и, соответственно, мы сможем получить их список, перебрав конструкцией for-in свойства объекта window или this (как видим, в этом контексте они - одно и то же). Ситуация немного меняется, когда мы пытаемся выявить список переменных внутри контекста функции:
, т.е. тут мы уже не можем достать private`ную переменную d из контекста this (из контекста window - тоже, поскольку здесь они по-прежнему одно и то же), мы получаем к ней доступ только обратившись по имени непосредственно - соответственно, у нас нет такого объекта, перечислив свойства которого, мы могли бы увидеть эту переменную. Ну и третий вариант: контекст конструктора объекта:
Т.к. window и this - уже разные объекты, выводим ещё и ссылки в контексте window. Что мы видим? Теперь переменные у нас по совместительству стали полями объекта. При чём, в отличие от других контекстов теперь слово var приобрело важное значение - без него переменная объявляется в контексте window, а с ним - объявляется в некотором неявном внутреннем контексте. Может быть, это контекст this? Нет - в этом контексте этих переменных нет тоже, а в нём есть только переменные, явно объявленные this.<имя_переменной>, это public-переменные. На что же ссылается контекст this? Как видим, последняя строчка кода выводит true - т.е. this ссылается на создаваемый конструктором объект. И вот вопрос - где же находятся переменные private (объявленные с ключевым словом var)? Где их искать, как их получить, если мы не знаем их имён? Кто-нибудь знает, как получить доступ к этому самому неявному внутреннему контексту? -------------------- |
||||||
|
|||||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Ответы на ваши вопросы находятся в 10.1.6 Activation Object (ECMAScript Language Specification Edition 3). |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: 19 Всего: 26 |
||||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
Кароче, труба... А жаль. -------------------- |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
||||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
Смотря в чём выход. Я, кажется, нащупал, как избавиться от создания функций в каждом объекте при наследовании, но вот это обстоятельство делает это очень неудобным и громоздким. Распишу когда закончу тестирование. -------------------- |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |