Object.getOwnPropertyDescriptors()

Baseline 已廣泛支援

該特性已非常成熟,可在多種裝置和瀏覽器版本上使用。自 2017 年 4 月以來,它已在各大瀏覽器上可用。

靜態方法 Object.getOwnPropertyDescriptors() 返回給定物件的所有自身屬性描述符。

試一試

const object = {
  foo: 42,
};

const descriptors = Object.getOwnPropertyDescriptors(object);

console.log(descriptors.foo.writable);
// Expected output: true

console.log(descriptors.foo.value);
// Expected output: 42

語法

js
Object.getOwnPropertyDescriptors(obj)

引數

obj

要獲取所有自身屬性描述符的物件。

返回值

一個包含物件所有自身屬性描述符的物件。如果沒有屬性,可能是一個空物件。

描述

此方法允許檢查物件所有自身屬性的精確描述。JavaScript 中的屬性由一個字串名稱或一個 Symbol 和一個屬性描述符組成。有關屬性描述符型別及其屬性的更多資訊,請參閱 Object.defineProperty()

屬性描述符是一個包含以下部分屬性的記錄

value

與屬性關聯的值(僅限資料描述符)。

可寫

當且僅當與屬性關聯的值可以被更改時為 true(僅限資料描述符)。

get

作為屬性的 getter 的函式,如果沒有 getter,則為 undefined(僅限訪問器描述符)。

set

作為屬性的 setter 的函式,如果沒有 setter,則為 undefined(僅限訪問器描述符)。

可配置

當且僅當此屬性描述符的型別可以更改並且該屬性可以從相應的物件中刪除時為 true

可列舉

當且僅當此屬性在相應物件的屬性列舉期間顯示時為 true

示例

建立淺複製

雖然 Object.assign() 方法只會將源物件的可列舉和自身屬性複製到目標物件,但您可以使用此方法和 Object.create() 在兩個未知物件之間實現 淺複製

js
Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj),
);

建立子類

建立子類的典型方法是定義子類,將其原型設定為超類例項,然後在該例項上定義屬性。這可能會很麻煩,尤其是對於 getter 和 setter。相反,您可以使用此程式碼設定原型。

js
function superclass() {}
superclass.prototype = {
  // Define the superclass constructor, methods, and properties here
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
  // Define the subclass constructor, methods, and properties here
});

規範

規範
ECMAScript® 2026 語言規範
# sec-object.getownpropertydescriptors

瀏覽器相容性

另見