Object.getOwnPropertyDescriptors()

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.getOwnPropertyDescriptors() 静的メソッドは、指定したオブジェクトのすべてのプロパティ記述子を返します。

試してみましょう

構文

js
Object.getOwnPropertyDescriptors(obj)

引数

obj

すべてのプロパティ記述子を取得するオブジェクト。

返値

オブジェクトのすべてのプロパティ記述子を含むオブジェクト。プロパティがない場合、空オブジェクトの可能性がある。

説明

このメソッドは、オブジェクトのすべての独自のプロパティの正確な記述の検査を可能にします。 JavaScript では、プロパティは文字列値による名前または Symbol とプロパティ記述子で構成されています。プロパティ記述子の型と属性についての詳細情報は、Object.defineProperty() で確認してください。

プロパティ記述子 は、次の属性のいくつかを持ちます。

value

プロパティに関連づけられた値です(データ記述子のみ)。

writable

true である場合、プロパティに関連づけられた値は変更することができます(データ記述子のみ)。

get

プロパティのゲッターとして提供する関数、あるいはゲッターがない場合は undefined です(アクセサー記述子のみ)。

set

プロパティのセッターとして提供する関数、あるいはセッターがない場合は undefined です(アクセサー記述子のみ)。

configurable

true である場合、この種の記述子を変更することや、対応するオブジェクトからプロパティを削除することができます。

enumerable

true である場合、このプロパティは対応するオブジェクトでのプロパティ列挙に現れます。

シャローコピーの生成

Object.assign() メソッドは、ソースオブジェクトから対象のオブジェクトに対して列挙可能かつ自身のプロパティのみコピーできる一方、2 つの未知のオブジェクト間のシャローコピーのために、このメソッドと Object.create() を使用できます。

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

サブクラスの作成

サブクラスを作成する通常の方法は、サブクラスを定義し、そのプロトタイプをスーパークラスのインスタンスに設定し、そのインスタンスにプロパティを定義することです。これは特にセッターやゲッターが無骨になることがあります。代わりに、プロトタイプを設定するためにこのコードを使用することもできます。

js
function superclass() {}
superclass.prototype = {
  // ここで superclass のコンストラクター、メソッド、プロパティを定義
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
  // ここで subclass のコンストラクター、メソッド、プロパティを定義
});

仕様書

Specification
ECMAScript Language Specification
# sec-object.getownpropertydescriptors

ブラウザーの互換性

BCD tables only load in the browser

関連情報