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

瀏覽器相容性

另見