属性 描述符对象存储在哪里?
Where are property descriptor objects stored?
我知道你可以获得一个属性描述符对象
某个对象的某个 属性 'prop
' obj
与
Object.getOwnPropertyDescriptor(obj,"prop");
。
我只是想知道:这些对象存储在哪里?
它们是存储在对象内部还是……其他地方?
我试图在开发人员工具中找到它们,但没有成功。
属性 除非明确请求,否则描述符对象不存在。它们是在您 call Object.getOwnPropertyDescriptor
时创建的 ad-hoc。
所以下面的代码:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
始终计算为 false。
正如我们所见(代码和规范),属性 描述符对象未存储,而是按需创建。
那么 writable
、configurable
、value
、get
、set
... 属性存储在哪里?规范不要求它们暴露给用户代码... Here is C++ definition for V8 PropertyDescriptor class - 似乎每个 属性 占用一个字节。
如果您想检查 属性 是否可写、可配置或类似,Firefox 控制台允许您这样做(但前提是 属性 不可写或具有 getter/setter ):
我知道你可以获得一个属性描述符对象
某个对象的某个 属性 'prop
' obj
与
Object.getOwnPropertyDescriptor(obj,"prop");
。
我只是想知道:这些对象存储在哪里?
它们是存储在对象内部还是……其他地方?
我试图在开发人员工具中找到它们,但没有成功。
属性 除非明确请求,否则描述符对象不存在。它们是在您 call Object.getOwnPropertyDescriptor
时创建的 ad-hoc。
所以下面的代码:
var foo = {bar:'foo'}
Object.getOwnPropertyDescriptor(foo, 'bar') === Object.getOwnPropertyDescriptor(foo, 'bar');
始终计算为 false。
正如我们所见(代码和规范),属性 描述符对象未存储,而是按需创建。
那么 writable
、configurable
、value
、get
、set
... 属性存储在哪里?规范不要求它们暴露给用户代码... Here is C++ definition for V8 PropertyDescriptor class - 似乎每个 属性 占用一个字节。
如果您想检查 属性 是否可写、可配置或类似,Firefox 控制台允许您这样做(但前提是 属性 不可写或具有 getter/setter ):