Object.defineProperties()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

试一试

const object = {};

Object.defineProperties(object, {
  property1: {
    value: 42,
    writable: true,
  },
  property2: {},
});

console.log(object.property1);
// Expected output: 42

语法

js
Object.defineProperties(obj, props)

参数

obj

要定义或修改属性的对象。

props

一个对象,其键表示要定义或修改的属性名称,其值是描述这些属性的对象。props 中的每个值必须是数据描述符或访问器描述符;不能同时是两者(有关更多详细信息,请参阅 Object.defineProperty())。

数据描述符和访问器描述符可选择包含以下键

可配置

当且仅当此属性描述符的类型可以更改,并且该属性可以从相应的对象中删除时为 true默认为 false

可枚举

当且仅当该属性在相应的对象属性枚举期间出现时为 true默认为 false

数据描述符还包含以下可选键

value

与属性关联的值。可以是任何有效的 JavaScript 值(数字、对象、函数等)。默认为 undefined

可写

当且仅当与属性关联的值可以通过赋值运算符更改时为 true默认为 false

访问器描述符还包含以下可选键

get

作为属性的 getter 的函数,或者在没有 getter 时为 undefined。该函数的返回值将用作属性的值。默认为 undefined

set

作为属性的 setter 的函数,或者在没有 setter 时为 undefined。该函数将接收新分配给属性的值作为其唯一参数。默认为 undefined

如果描述符既没有 valuewritableget 键,也没有 set 键,则将其视为数据描述符。如果描述符同时具有 valuewritable 以及 getset 键,则会抛出异常。

返回值

传递给函数的对象。

示例

使用 Object.defineProperties

js
const obj = {};
Object.defineProperties(obj, {
  property1: {
    value: true,
    writable: true,
  },
  property2: {
    value: "Hello",
    writable: false,
  },
  // etc. etc.
});

规范

规范
ECMAScript® 2026 语言规范
# sec-object.defineproperties

浏览器兼容性

另见