ES5 规范对象类型
ES5 spec the Object type
我正在通读 ES5 规范,对以下内容有点困惑:
8.6 The Object Type
...
There are two kinds of access for named (non-internal) properties: get and put, corresponding to retrieval and assignment, respectively.
谁能解释一下这个短语到底指的是什么(它的意思是什么?)?
我只看到了命名访问器属性 get
和 set
。
它指的是您访问数据的方式,而不是函数名称。它本质上是在解释 ES5 对象可以以类似的方式访问属性以进行写入,如 myObject.property = 5 和 myObject['property'] = 5 或读取。它说 "non-internal" 因为内部属性只能通过使用原型来放置。
规范说 putting 和 getting 是可能发生在属性上的两个动作。 Objects have the internal methods [[Put]]
and [[Get]]
对应于这些操作。
[[Put]]
是一种内部方法,存在于每个对象中,将值存储在对象的属性中。任何时候对 属性 执行赋值操作,都会导致环境执行 [[Put]]
.
[[Set]]
是访问器 属性 描述符的内部 属性。这就是你在定义访问器 属性 的 set
setter 函数时定义的内容。 (注意:[[Set]]
存在于 属性 描述符 上,而不存在于对象上。并非所有属性都有 [[Set]]
,但所有对象都有 [[Put]]
。)
如果您尝试对作为访问器 属性 的对象 属性 执行 [[Put]]
,该操作将调用 属性 的 [[Set]]
函数,根据 [[Put]]
算法的第 5 步:
If IsAccessorDescriptor(desc) is true, then
- a. Let setter be desc.[[Set]] which cannot be undefined.
- b. Call the [[Call]] internal method of setter providing O as the this value and providing V as the sole argument.
简而言之,函数 [[Set]]
仅适用于访问器属性,而 [[Put]
可以应用于访问器或数据属性。
我正在通读 ES5 规范,对以下内容有点困惑:
8.6 The Object Type
... There are two kinds of access for named (non-internal) properties: get and put, corresponding to retrieval and assignment, respectively.
谁能解释一下这个短语到底指的是什么(它的意思是什么?)?
我只看到了命名访问器属性 get
和 set
。
它指的是您访问数据的方式,而不是函数名称。它本质上是在解释 ES5 对象可以以类似的方式访问属性以进行写入,如 myObject.property = 5 和 myObject['property'] = 5 或读取。它说 "non-internal" 因为内部属性只能通过使用原型来放置。
规范说 putting 和 getting 是可能发生在属性上的两个动作。 Objects have the internal methods [[Put]]
and [[Get]]
对应于这些操作。
[[Put]]
是一种内部方法,存在于每个对象中,将值存储在对象的属性中。任何时候对 属性 执行赋值操作,都会导致环境执行 [[Put]]
.
[[Set]]
是访问器 属性 描述符的内部 属性。这就是你在定义访问器 属性 的 set
setter 函数时定义的内容。 (注意:[[Set]]
存在于 属性 描述符 上,而不存在于对象上。并非所有属性都有 [[Set]]
,但所有对象都有 [[Put]]
。)
如果您尝试对作为访问器 属性 的对象 属性 执行 [[Put]]
,该操作将调用 属性 的 [[Set]]
函数,根据 [[Put]]
算法的第 5 步:
If IsAccessorDescriptor(desc) is true, then
- a. Let setter be desc.[[Set]] which cannot be undefined.
- b. Call the [[Call]] internal method of setter providing O as the this value and providing V as the sole argument.
简而言之,函数 [[Set]]
仅适用于访问器属性,而 [[Put]
可以应用于访问器或数据属性。