我知道您可以获取属性描述符对象
某个对象prop
的某个属性“obj
”的属性
Object.getOwnPropertyDescriptor(obj,"prop");
。
我只是想知道:这些物品存放在哪里?
它们是在内部存储在一个对象中还是......在其他地方
我试图在开发人员工具中找到它们,但没有运气。
答案 0 :(得分:1)
除非明确请求,否则属性描述符对象不存在。它们是call Object.getOwnPropertyDescriptor
时临时创建的。
所以下面的代码:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
总是评估为假。
正如我们所看到的(代码和规范),属性描述符对象不是存储的,而是按需创建的。
那么writable
,configurable
,value
,get
,set
......存储的是什么?规范并不要求它们暴露给用户代码...... Here is C++ definition for V8 PropertyDescriptor class - 似乎每个属性占用一个字节。
如果您想检查属性是否可写,可配置或类似,Firefox控制台允许您这样做(但仅当属性不可写或具有getter / setter时):