Ответ 1
Это невозможно.
Объект не связан ни в какой области видимости выражений EcmaScript, когда оцениваются значения свойств.
Раздел 11.1.5 спецификации языка EcmaScript объясняет, как работает синтаксис конструктора объектов.
Далее описывается, как объект создается как побочный эффект оценки первой пары значений ключа свойства
Произведение
PropertyNameAndValueList : PropertyAssignment
оценивается следующим образом:
- Пусть obj является результатом создания нового объекта, как если бы выражение
new Object()
, гдеObject
- стандартный встроенный конструктор с этим именем.- Пусть propId будет результатом оценки PropertyAssignment.
- Вызвать внутренний метод [[DefineOwnProperty]] obj с аргументами
propId.name
,propId.descriptor
иfalse
.- Возврат obj.
Обратите внимание, что PropertyAssignment оценивается после создания obj, но obj никогда не привязывается к любому имени, доступному для выражения EcmaScript.
Только после того, как все значения свойств будут оцениваться, все будет назначено на o
или любой другой символ в вашей программе.