ES5规范了Object类型

时间:2015-10-05 17:35:34

标签: javascript ecmascript-5

我正在阅读ES5规范并对以下内容感到有些困惑:

  

8.6对象类型

     

...   命名(非内部)属性有两种访问方式:get和put,分别对应于检索和赋值。

有人可以澄清这句话的确切含义(它的含义是什么?)? 我只看到过命名的访问者属性getset

2 个答案:

答案 0 :(得分:2)

规范说推出获取是属性可能发生的两个动作。 Objects have the internal methods [[Put]] and [[Get]]与这些行为相对应。

[[Put]]是一个内部方法,存在于每个对象中,用于将值存储在对象的属性中。每次对属性执行赋值操作时,都会导致环境执行[[Put]]

[[Set]]是访问者属性描述符的内部属性。这是您在定义访问者属性的set setter函数时定义的内容。 (注意:[[Set]]存在于 属性描述符 上,而不存在于对象上。并非所有属性都有[[Set]],但所有对象都有[[Put]] 1}}。)

如果您尝试对作为访问者属性的对象属性执行[[Put]],则该操作将根据[[Set]]算法的第5步调用属性的[[Put]]函数:< / p>

  
      
  1. 如果IsAccessorDescriptor(desc)为true,则

         
        
    • 一个。设setter为desc。[[Set]],不能定义。
    •   
    • 湾调用set的[[Call]]内部方法,将O作为该值,并将V作为唯一参数。
    •   
  2.   

简而言之,函数[[Set]]仅适用于访问者属性,而[[Put]可以应用于访问者或数据属性。

答案 1 :(得分:1)

它指的是您可以访问数据的方式,而不是函数名称。它基本上解释了ES5对象可以具有用于写入的属性,如myObject.property = 5和myObject ['property'] = 5或以类似的方式读取。它表示“非内部”,因为内部属性可能只能通过使用原型来实现。