JavaScript のオブジェクトのプロパティには 3 つの属性があります:
1.writable。プロパティが書き込み可能かどうか。
2.数えられる。 for/in ステートメントを使用するときにプロパティを列挙するかどうか。
3. 設定可能。このプロパティのプロパティを変更できるかどうか、およびプロパティを削除できるかどうか。
ECMAScript 3 標準では、上記の 3 つのプロパティの値は true であり、変更できません。ECMAScript 5 標準では、新しく作成されたオブジェクトのプロパティは書き込み可能、列挙可能、および削除可能です。オブジェクト (プロパティ記述子) を使用して、これらのプロパティを設定および変更します。
プロパティの値情報もプロパティの属性として表示される場合、オブジェクト内のプロパティには、value、writable、enumerable、configurable の 4 つの属性があります。
getter メソッドと setter メソッドで定義されたプロパティの場合、書き込み可能な属性がないため (プロパティが書き込み可能かどうかは、setter メソッドが存在するかどうかによって決まります)、このプロパティには get、set、enumerable、configurable の 4 つの属性もあります。 get および set 属性の値は関数です。
オブジェクトのプロパティのプロパティを取得する
ECMAScript 5 標準では、Object.getOwnPropertyDescriptor() を通じてオブジェクト自体のプロパティのプロパティ情報を取得できます。存在しないか、プロパティがプロトタイプ オブジェクトから継承されている場合は、未定義を返します。
オブジェクトのプロパティのプロパティを設定するECMAScript 5 標準では、Object.defineProperty() を通じてオブジェクト自体の特定のプロパティのプロパティを設定できます。プロトタイプ オブジェクトの場合、JavaScript はオブジェクト自体に同じ名前のプロパティを作成します。これは、代入操作の関連動作と一致します:
var o = {x:1}; var a = Object.create(o); a.y = 3; console.log(Object.getOwnPropertyDescriptor(a, "y"));//Object {configurable=true, enumerable=true, writable=true, value=3} console.log(Object.getOwnPropertyDescriptor(a, "x"));//undefined
プロパティのプロパティを変更することに加えて、プロパティを次のように変更することもできます。 getter または setter でアクセスできます:
Object.defineProperty(a, "y", { value:3, writable:true, enumerable:false, configuration:true }); console.log(a.propertyIsEnumerable("y"));//false
Object.defineProperty() を使用する場合、プロパティ記述オブジェクト内のプロパティ値が部分的に無視される場合があります。プロパティ値が無視される場合、JavaScript の処理規則は次のようになります。次のように:
プロパティが新しく作成された場合、無視されるプロパティ値はすべて false または undefine になります。
プロパティがすでに存在する場合、無視されたプロパティ値はすべて変更されません。オブジェクトのプロパティのプロパティをバッチで設定する
複数のプロパティのプロパティを一度に設定する必要がある場合は、Object.defineProperties() ステートメントを使用できます。このステートメントは、変更されたオブジェクトを返します。 プロパティ属性を変更する場合は、次のルールに従う必要があります。ルールに違反すると、JavaScript は TypeError を報告します: オブジェクトが拡張可能でない場合、既存のプロパティのプロパティを変更することしかできず、新しいプロパティを追加することはできません。 プロパティの構成可能属性と書き込み可能属性が両方とも false の場合、プロパティ値は変更できません。プロパティの writable 属性が false であっても、configurable 属性が true の場合でも、プロパティ値は変更できます。 以上がJavaScriptでプロパティ属性を取得・設定する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。Object.defineProperty(a, "x", {
value:1,
writable:true,
enumerable:false,
configuration:true
});
console.log(a.propertyIsEnumerable("x"));//false
console.log(o.propertyIsEnumerable("x"));//true