在阅读Principles of Object-Oriented JavaScript
时,我在作者网站的免费章节page 32末尾看到了以下内容:
首次将属性添加到对象时,JavaScript会使用 在对象上调用[[Put]]的内部方法。 [[Put]]方法 在对象中创建一个点来存储属性。
将新值分配给现有属性时,单独使用 被称为[[Set]]的操作发生。这个操作取代了 具有新属性的属性的当前值。
作者在这里讨论了由于名为[[Set]]的对象的内部属性而改变命名数据属性的值。 我查看ECMA 5并找到[[Get]],[[Put]]但没有这样的属性[[Set]]。但是[[Set]]属性可用于object中的命名访问者。
我的问题是有任何对象内部属性叫[[Set]]吗?如果没有,那么数据属性值的变化是如何发生的?
答案 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]]。或多或少,他们表现得一样。