定义。要定义属性,可以使用
等函数Object.defineProperty(obj,propName,propDesc)
此函数的主要目的是向obj添加一个自己的(直接)属性,其属性(可写等,见下文)由propDesc指定。次要目的是更改属性的属性,包括其值。
分配。要分配属性,请使用
等表达式obj.prop = value
这种表达的主要目的是改变价值。在执行该更改之前,JavaScript参考了obj的原型链[1]:如果在obj或其中一个原型中有某个setter,则赋值是对该setter的调用。赋值具有创建属性(如果它不存在)的副作用,但是 - 作为obj的自身属性,具有默认属性。
但这两种方法的区别和后果是什么?
答案 0 :(得分:1)
基本上,Object.defineProperty(obj, propName, propDesc)
使您可以更好地控制对象的定义属性,最重要的是,如何访问每个属性。 obj.prop = value
无法控制以后(定义之后)如何访问该属性。
重要提示:Object.defineProperty()
比简单属性定义慢很多,因此,除非您需要控制以后如何访问属性,否则请不要使用Object.defineProperty()
。
Have a look at this article on the same issue, but with a specific example.