[[Set]]对象的属性

时间:2017-01-21 21:44:27

标签: javascript ecmascript-5

在阅读Principles of Object-Oriented JavaScript时,我在作者网站的免费章节page 32末尾看到了以下内容:

  

首次将属性添加到对象时,JavaScript会使用   在对象上调用[[Put]]的内部方法。 [[Put]]方法   在对象中创建一个点来存储属性。

     

将新值分配给现有属性时,单独使用   被称为[[Set]]的操作发生。这个操作取代了   具有新属性的属性的当前值。

作者在这里讨论了由于名为[[Set]]的对象的内部属性而改变命名数据属性的值。 我查看ECMA 5并找到[[Get]],[[Put]]但没有这样的属性[[Set]]。但是[[Set]]属性可用于object中的命名访问者。

我的问题是有任何对象内部属性叫[[Set]]吗?如果没有,那么数据属性值的变化是如何发生的?

1 个答案:

答案 0 :(得分:2)

那是因为[[Put]]在ECMAScript 6中被重命名为[[Set]]。

具体来说,来自Early ES6 Working Drafts

  • Rev 12(2012年11月22日草案)

      

    用[[GetP]] / [[SetP]]替换[[Get]] / [[Put]]。

  • 第14版(2013年3月8日草案)

      

    将[[GetP]]重命名为[[Get]]和[[SetP]]重命名为[[Set]]

在ES5中有一个[[Put]]内部方法而没有[[Set]]。在ES6中有一个[[Set]]内部方法而没有[[Put]]。或多或少,他们表现得一样。