Где хранятся объекты дескриптора свойства?
Я знаю, что вы можете получить дескриптор свойства объекта определенного свойстваprop
определенного объекта obj
с Object.getOwnPropertyDescriptor(obj,"prop");
, Мне было просто интересно: где хранятся эти объекты? Они хранятся внутри объекта или.... в другом месте? Я пытался найти их в инструментах разработчика, но безуспешно.
1 ответ
Объект дескриптора свойства не существует, если явно не запрошен. Они создаются специально, когда вы звонитеObject.getOwnPropertyDescriptor
, Итак, следующий код:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
Всегда оценивайте как ложное.
Итак, как мы видим (и код, и спецификация), объекты дескриптора свойства не сохраняются, а создаются по требованию.
Так где же writable
, configurable
, value
, get
, set
... хранятся атрибуты? Спецификация не требует, чтобы они подвергались пользовательскому коду... Вот определение C++ для класса PropertyDescriptor V8 - кажется, что каждое свойство занимает один байт.
И если вы хотите проверить, является ли свойство доступным для записи, настраиваемым или аналогичным, консоль Firefox позволит вам сделать это (но только если свойство не доступно для записи или имеет метод получения / установки):