Object.defineProperties()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Object.defineProperties() 静态方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

尝试一下

语法

js
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

如果一个属性描述符没有 valuewritablegetset 键中的任何一个,那么它被视为一个数据描述符。如果一个属性描述符同时具有 valuewritablegetset 键中的任意一个组合,就会抛出异常。

返回值

传递给函数的对象。

示例

使用 Object.defineProperties

js
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

参见