→
与えられたオブジェクトの特定のプロパティの構成を記述するオブジェクトを返します。
すなわち、あるオブジェクトの直接の表現であり、オブジェクトのプロトタイプ チェーン内のものではない。返されるオブジェクトは変更可能ですが、変更しても元のプロパティの構成には影響を与えません。
obj | プロパティの確認を行うオブジェクトです。 |
---|---|
prop | 記述子を受け取るプロパティの名前または Symbol です。 |
指定されたプロパティがオブジェクトにある場合は、プロパティ記述子で、それ以外の場合は undefined です。
このメソッドで、プロパティの正確な定義を確認することができます。 JavaScript のプロパティは、文字列値の名前または Symbol とプロパティ記述子から成ります。プロパティ記述子およびその属性についての詳細情報は、 にあります。
プロパティ記述子は、以下の属性のいくつかを記録したものです:
value | プロパティに関連づけられた値です(データ記述子のみ)。 |
---|---|
writable | true である場合、プロパティに関連づけられた値は変更することができます(データ記述子のみ)。 |
get | プロパティのゲッターとして提供する関数、あるいはゲッターがない場合は undefined です(アクセサ記述子のみ)。 |
set | プロパティのセッターとして提供する関数、あるいはセッターがない場合は undefined です(アクセサ記述子のみ)。 |
configurable | true である場合、この種の記述子を変更することや、対応するオブジェクトからプロパティを削除することができます。 |
enumerable | true である場合、このプロパティは対応するオブジェクトでのプロパティ列挙に現れます。 |
var o, d; o = { get foo() { return 17; } }; d = Object.getOwnPropertyDescriptor(o, 'foo'); // d is { // configurable: true, // enumerable: true, // get: /*the getter function*/, // set: undefined // } o = { bar: 42 }; d = Object.getOwnPropertyDescriptor(o, 'bar'); // d is { // configurable: true, // enumerable: true, // value: 42, // writable: true // } o = { [Symbol.for('baz')]: 73 } d = Object.getOwnPropertyDescriptor(o, Symbol.for('baz')); // d is { // configurable: true, // enumerable: true, // value: 73, // writable: true // } o = {}; Object.defineProperty(o, 'qux', { value: 8675309, writable: false, enumerable: false }); d = Object.getOwnPropertyDescriptor(o, 'qux'); // d is { // value: 8675309, // writable: false, // enumerable: false, // configurable: false // }
ECMAScript 5 では、このメソッドへの最初の引数がオブジェクトでない(プリミティブである)場合は、TypeError が発生します。ECMAScript 2015 では、最初の引数がオブジェクトでなくても、最初に強制的にオブジェクトに変換します。
Object.getOwnPropertyDescriptor('foo', 0); // TypeError: "foo" is not an object // ES5 code Object.getOwnPropertyDescriptor('foo', 0); // Object returned by ES2015 code: { // configurable: false, // enumerable: true, // value: "f", // writable: false // }