JavaScript

Object.getOwnPropertyDescriptors()メソッド

 編集:2022.07.28 by T.A.

指定したオブジェクトのすべてのプロパティ記述子を返します。

Object.getOwnPropertyDescriptors(obj)
obj すべてのプロパティ ディスクリプタを取得するオブジェクト。
戻り値

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

解説

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

プロパティ ディスクリプタ は、次の属性のいくつかを持ちます:

value プロパティに関連づけられた値です(データ ディスクリプタのみ)。
writable true である場合、プロパティに関連づけられた値は変更することができます(データ記述子のみ)。
get プロパティのゲッターとして提供する関数、あるいはゲッターがない場合は undefined です(アクセサ記述子のみ)。
set プロパティのセッターとして提供する関数、あるいはセッターがない場合は undefined です(アクセサ記述子のみ)。
configurable true である場合、この種の記述子を変更することや、対応するオブジェクトからプロパティを削除することができます。
enumerable true である場合、このプロパティは対応するオブジェクトでのプロパティ列挙に現れます。
浅いコピーの生成

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

Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj)
);
サブクラスの作成

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

function superclass() {}
superclass.prototype = {
  // ここでメソッドとプロパティを定義します
};
function subclass() {}
subclass.prototype = Object.create(
  superclass.prototype,
  {
    // ここでメソッドとプロパティを定義します
  }
);

テスト