6

我知道您prop可以obj使用 Object.getOwnPropertyDescriptor(obj,"prop");. 我只是想知道:这些对象存储在哪里?它们是存储在对象内部还是....其他地方?我试图在开发人员工具中找到它们,但没有运气。

4

1 回答 1

1

除非明确请求,否则属性描述符对象不存在。它们是在您调用Object.getOwnPropertyDescriptor时临时创建的。所以下面的代码:

var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');

总是评估为假。

所以正如我们所看到的(代码和规范),属性描述符对象不是存储的,而是按需创建的。

那么writable, configurable, value, get, set... 属性存储在哪里?规范不要求它们暴露给用户代码...这是 V8 PropertyDescriptor 类的 C++ 定义- 似乎每个属性都占用一个字节。

如果您想检查属性是否可写、可配置或类似,Firefox 控制台允许您这样做(但仅当属性不可写或具有 getter/setter 时): Firefox 开发工具

于 2016-01-04T13:17:23.500 回答