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() を通じてオブジェクト自体のプロパティを設定できます:
プロパティが新しく作成された場合、無視されるプロパティ値はすべて false または未定義です。
プロパティがすでに存在する場合、無視されたプロパティ値はすべて変更されません。
オブジェクトのプロパティのプロパティをバッチで設定します
複数のプロパティのプロパティを一度に設定する必要がある場合は、Object.defineProperties() ステートメントを使用できます。このステートメントは、変更されたオブジェクトを返します。
プロパティ属性を変更する場合は、次の規則に従う必要があります。ルールに違反すると、JavaScript は TypeError を報告します:
オブジェクトが拡張可能でない場合は、既存のプロパティのプロパティのみを変更でき、新しいプロパティを追加することはできません。
プロパティの設定可能な属性が false の場合、設定可能な属性と列挙可能な属性の値は変更できません。書き込み可能な属性については、true から false に変更できますが、false から true に変更することはできません。 。プロパティが getter および setter によって定義されている場合、getter メソッドおよび setter メソッドは変更できません。
プロパティの構成可能属性と書き込み可能属性が両方とも false の場合、プロパティ値は変更できません。プロパティの writable 属性が false であっても、configurable 属性が true の場合でも、プロパティ値は変更できます。