我正在阅读ES5规范,并对下面这篇文章感到有点困惑:
8.6对象类型..。命名(非内部)属性有两种访问方式: get和put,分别对应于检索和赋值。
有人能澄清这个短语到底指的是什么吗(它的意思是什么?)我只看到了命名的访问器属性get
和set
。
发布于 2015-10-05 18:16:31
规范说,放置和获取是两个可能发生在属性上的操作。对应于这些操作的[[Get]]
。
[[Put]]
是一个内部方法,存在于每个对象中,它将值存储在对象的属性中。每当您对属性执行赋值操作时,都会导致环境执行[[Put]]
。
[[Set]]
是访问器属性描述符的内部属性。这就是在定义访问器属性的set
setter函数时定义的内容。(注意:[[Set]]
存在于属性描述符上,而不是对象上。并不是所有的属性都有[[Set]]
,但是所有的对象都有一个[[Put]]
。)
如果您试图对作为访问器属性的对象属性执行[[Put]]
,则该操作将根据[[Put]]
算法的步骤5调用该属性的[[Set]]
函数:
- 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]
可以应用于访问器属性或数据属性。
发布于 2015-10-05 18:05:18
它指的是访问数据的方式,而不是函数名。它本质上解释了ES5对象可以以类似的方式访问用于写入的属性,如myObject.property =5和myObject‘’property‘=5或that。它说“非内部”,因为内部属性只能通过原型的使用。
https://stackoverflow.com/questions/32954533
复制相似问题