Object.defineProperties()
Object.defineProperties()
静态方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
尝试一下
语法
Object.defineProperties(obj, props)
参数
obj
-
在其上定义或修改属性的对象。
props
-
一个对象,其中每个键表示要定义或修改的属性的名称,每个值是描述该属性的对象。在
props
中的每个值必须是且只能是数据描述符或访问器描述符之一;不能同时为两者(更多详细信息,请参见Object.defineProperty()
)。数据描述符和访问器描述符可以包含以下可选键:
configurable
-
如果此属性描述符的类型可以更改并且属性可以从相应的对象中删除,则为
true
。默认为false
。 enumerable
-
如果此属性在枚举相应对象的属性时应显示出来,则为
true
。默认为false
。
数据描述符还具有以下可选键:
value
-
与属性关联的值。可以是任何有效的 JavaScript 值(数字、对象、函数等)。默认为
undefined
。 writable
-
如果与属性关联的值可以使用赋值运算符更改,则为
true
。默认为false
。
访问器描述符还具有以下可选键:
get
-
作为该属性的 getter 函数,如果没有 getter 则为
undefined
。函数返回值将被用作属性的值。默认为undefined
。 set
-
作为该属性的 setter 函数,如果没有 setter 则为
undefined
。该函数将只接收一个参数,即被分配给属性的新值。默认为undefined
。
如果一个属性描述符没有
value
、writable
、get
、set
键中的任何一个,那么它被视为一个数据描述符。如果一个属性描述符同时具有value
或writable
和get
或set
键中的任意一个组合,就会抛出异常。
返回值
传递给函数的对象。
示例
使用 Object.defineProperties
const obj = {};
Object.defineProperties(obj, {
property1: {
value: true,
writable: true,
},
property2: {
value: "Hello",
writable: false,
},
// 等等……
});
规范
Specification |
---|
ECMAScript Language Specification # sec-object.defineproperties |
浏览器兼容性
BCD tables only load in the browser