Я знаю, что вы можете получить объект описания объекта определенного объекта 'prop
' определенного объекта obj
с Object.getOwnPropertyDescriptor(obj,"prop");
. Мне просто интересно: где хранятся эти объекты? Сохраняются ли они внутри объекта или ... в другом месте? Я попытался найти их в инструментах разработчика, но не повезло.Где хранятся объекты дескриптора свойств?
ответ
Объектов дескриптора объекта не существует, если явно не запрошено. Они создаются ad-hoc, когда вы call Object.getOwnPropertyDescriptor
. Так следующий код:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
Всегда оценивайте ложь.
Так как мы видим (как код, так и спецификацию), объекты дескриптора объекта не сохраняются, а создаются по требованию.
Так где writable
, configurable
, value
, get
, set
... atributtes хранится? Спецификация не требует, чтобы они подвергались воздействию кода пользователя ... Here is C++ definition for V8 PropertyDescriptor class - Кажется, что каждое свойство занимает один байт.
И если вы хотите проверить, если свойство записи, конфигурируемый или аналогичный, Firefox консоль позволит вам сделать это (но только если свойство не доступен для записи или имеет геттер/сеттер):
Но не * любой объект * - по сравнению с другим объектом - возвращает false? Например, '[1,2,3] == [1,2,3]' также 'false' – Danield
Объекты сравниваются по ссылке (« это ** тот же ** объект »), а не по значению (« это ** идентичный ** объект "). Например. 'var a = {}, b = a; === б; // true' – Ginden
да, вы правы :) – Danield
Из моего чтения spec, вызывает эту функцию [в конечном итоге здесь] (http://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty), где он создает возврат из кучи разных '[ [внутренние свойства]]. Эти свойства не подвергаются действию на конечную рабочую среду, но некоторые реализации могут сделать их доступными, например, в инструментах dev. Ваше перемещение может варьироваться ... –
Они хранятся там, где любая конкретная реализация предпочитает их хранить, или, более вероятно, они создаются по запросу. –