我正在阅读ES5规范并对以下内容感到有些困惑:
8.6对象类型
... 命名(非内部)属性有两种访问方式:get和put,分别对应于检索和赋值。
有人可以澄清这句话的确切含义(它的含义是什么?)?
我只看到过命名的访问者属性get
和set
。
答案 0 :(得分:2)
规范说推出和获取是属性可能发生的两个动作。 Objects have the internal methods [[Put]]
and [[Get]]
与这些行为相对应。
[[Put]]
是一个内部方法,存在于每个对象中,用于将值存储在对象的属性中。每次对属性执行赋值操作时,都会导致环境执行[[Put]]
。
[[Set]]
是访问者属性描述符的内部属性。这是您在定义访问者属性的set
setter函数时定义的内容。 (注意:[[Set]]
存在于 属性描述符 上,而不存在于对象上。并非所有属性都有[[Set]]
,但所有对象都有[[Put]]
1}}。)
如果您尝试对作为访问者属性的对象属性执行[[Put]]
,则该操作将根据[[Set]]
算法的第5步调用属性的[[Put]]
函数:< / p>
- 醇>
如果IsAccessorDescriptor(desc)为true,则
- 一个。设setter为desc。[[Set]],不能定义。
- 湾调用set的[[Call]]内部方法,将O作为该值,并将V作为唯一参数。
简而言之,函数[[Set]]
仅适用于访问者属性,而[[Put]
可以应用于访问者或数据属性。
答案 1 :(得分:1)
它指的是您可以访问数据的方式,而不是函数名称。它基本上解释了ES5对象可以具有用于写入的属性,如myObject.property = 5和myObject ['property'] = 5或以类似的方式读取。它表示“非内部”,因为内部属性可能只能通过使用原型来实现。