JavaScriptのオブジェクトのプロパティには、次の3つのプロパティがあります。
1.書き込み。このプロパティは書かれていますか?
2.非緩和。 for/in statementを使用する場合、プロパティは列挙されますか?
3.コンフィグラブル。プロパティのプロパティを変更できるかどうか、およびプロパティを削除できるかどうか。
ECMAScript 3の標準では、上記の3つのプロパティの値は真であり、変更できません。これらのプロパティを構成および変更するプロパティオブジェクト(プロパティ記述子)。
プロパティの値情報がプロパティの属性としても使用されている場合、オブジェクト内のプロパティには、値、書き込み可能、列挙可能、構成可能な4つのプロパティがあります。
GetterおよびSetterメソッドによって定義されるプロパティの場合、書き込み可能なプロパティがないため(Writableプロパティはセッターメソッドが存在するかどうかによって異なります)、このプロパティには4つのプロパティがあります。 「関数です」。
オブジェクトプロパティのプロパティを取得します
ECMAScript 5標準では、オブジェクト自体の特定のプロパティのプロパティ情報は、object.getownPropertyDescriptor()を介して取得できます。
コードコピーは次のとおりです。
var o = {x:1};
var a = object.create(o);
ay = 3;
console.log(object.getownPropertyDescriptor(a、 "y")); // object {configurable = true、enumerable、writable = true、value = 3}
console.log(object.getownPropertyDescriptor(a、 "x")); // undefined
ご覧のとおり、プロパティが存在しない場合、またはプロパティがプロトタイプオブジェクトから継承する場合、未定義は返されます。
オブジェクトプロパティのプロパティを設定します
ECMAScript 5標準では、オブジェクト自体の特定のプロパティのプロパティをobject.defineProperty()を介して設定できます。
コードコピーは次のとおりです。
object.defineProperty(a、 "y"、{
値:3、
手紙:本当、
列挙可能:FALSE、
構成:true
});
console.log(a.propertyisenumerable( "y")); // false
設定されたプロパティがプロトタイプオブジェクトから継承されている場合、JavaScriptはオブジェクト自体に同じ名前のプロパティを作成します。これは、割り当て操作の関連する動作と一致しています。
コードコピーは次のとおりです。
object.defineProperty(a、 "x"、{
値:1、
手紙:本当、
列挙可能:FALSE、
構成:true
});
console.log(a.propertyisenumerable( "x")); // false
console.log(o.propertyisenumerable( "x")); // true
プロパティのプロパティの変更に加えて、GetterまたはSetterでアクセスするためにプロパティを変更することもできます。
コードコピーは次のとおりです。
object.defineProperty(a、 "y"、{
get:function(){return 42;}
});
console.log(ay); // 42
object.defineProperty()を使用する場合、プロパティ説明のプロパティ値を部分的に無視する場合、JavaScriptの処理ルールは次のとおりです。
プロパティが新しく作成されている場合、無視されたすべてのプロパティ値は虚偽または未定義です。
プロパティが既に存在する場合、無視されたすべてのプロパティ値はそのまま残ります。
バッチにオブジェクトプロパティのプロパティを設定します
複数のプロパティのプロパティを一度に設定する必要がある場合は、object.defineProperties()ステートメントを使用できます。このステートメントは、変更されたオブジェクトを返します。
コードコピーは次のとおりです。
object.defineProperties(a、{
"y":{value:79、writable:true、Enumerable:true、configurable:true}、
"z":{value:99、writable:true、Enumerable:true、configurable:true}
});
console.log(a); // object {y = 79、z = 99}
プロパティプロパティ設定ルール
プロパティプロパティを変更する場合は、次のルールに従う必要があります。ルールが違反されている場合、JavaScriptはTypeErrorエラーを報告します。
オブジェクトが拡張できない場合、既存のプロパティのプロパティのみを変更でき、新しいプロパティを追加できません。
プロパティの構成可能なプロパティがfalseである場合、構成可能なプロパティと列挙可能なプロパティの値を変更することはできません。プロパティがGetterとSetterによって定義されている場合、GetterおよびSetterメソッドを変更できません。
プロパティの構成可能なプロパティと書き込み可能なプロパティが両方とも偽の場合、プロパティ値を変更することはできません。プロパティの執筆可能なプロパティが虚偽であるが、その構成可能なプロパティが真である場合、プロパティ値はまだ変更できます。