定义。要定义一个属性,可以使用一个函数,例如
Object.defineProperty(obj, propName, propDesc)
此函数的主要目的是为 obj 添加一个自己的(直接)属性,其属性(可写等,见下文)由 propDesc 指定。次要目的是更改属性的属性,包括其值。
任务。要分配给一个属性,可以使用一个表达式,例如
obj.prop = value
这种表达式的主要目的是改变值。在执行该更改之前,JavaScript 会查询 obj 的原型链 [1]:如果 obj 或其原型中的某个位置存在 setter,则分配是对该 setter 的调用。如果它不存在,赋值具有创建属性的副作用——作为 obj 的自己的属性,具有默认属性。
但是这两种方法的区别和后果是什么?