-2

定义。要定义一个属性,可以使用一个函数,例如

Object.defineProperty(obj, propName, propDesc)

此函数的主要目的是为 obj 添加一个自己的(直接)属性,其属性(可写等,见下文)由 propDesc 指定。次要目的是更改属性的属性,包括其值。

任务。要分配给一个属性,可以使用一个表达式,例如

obj.prop = value

这种表达式的主要目的是改变值。在执行该更改之前,JavaScript 会查询 obj 的原型链 [1]:如果 obj 或其原型中的某个位置存在 setter,则分配是对该 setter 的调用。如果它不存在,赋值具有创建属性的副作用——作为 obj 的自己的属性,具有默认属性。

但是这两种方法的区别和后果是什么?

4

1 回答 1

1

基本上,Object.defineProperty(obj, propName, propDesc)您可以更好地控制为对象定义属性,最重要的是,如何访问每个属性。obj.prop = value不会让您对稍后(定义后)如何访问该属性进行任何控制。

重要提示:Object.defineProperty()将比简单的属性定义慢很多,因此除非您需要控制以后如何访问属性,否则不要使用Object.defineProperty().

看看这篇关于同一问题的文章,但有一个具体的例子。

于 2013-04-13T15:49:30.293 回答