JavaScriptオブジェクトのプロパティ属性を詳しく解説_基礎知識

WBOY
リリース: 2016-05-16 16:53:56
オリジナル
1258 人が閲覧しました

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() を通じてオブジェクト自体のプロパティのプロパティ情報を取得できます:

コードをコピー コードは次のとおりです:

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")) ;//未定義

ご覧のとおり、プロパティが存在しない場合、またはプロパティがプロトタイプ オブジェクトから継承する場合は、unknown が返されます。

オブジェクトのプロパティのプロパティを設定します

ECMAScript 5 標準では、Object.defineProperty() を通じてオブジェクト自体のプロパティを設定できます:

コードをコピー コードは次のとおりです:

Object.defineProperty(a, "y", {
value:3,
writable:true,
enumerable:false ,
configuration: true
});
console.log(a.propertyIsEnumerable("y"));//false

設定されたプロパティがプロトタイプ オブジェクトから継承される場合、次に、JavaScript はオブジェクト自体に同じ名前のプロパティを作成します。これは、代入操作の関連する動作と一致しています:
コードをコピー コードは次のとおりです。

Object.defineProperty(a, "x", {
value:1,
writable:true,
enumerable: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(a.y);//42

Object.defineProperty()を使用する場合、プロパティ記述オブジェクト内のプロパティ値を一部無視して処理を行うことができます。 JavaScript のルールは次のとおりです:

プロパティが新しく作成された場合、無視されるプロパティ値はすべて false または未定義です。
プロパティがすでに存在する場合、無視されたプロパティ値はすべて変更されません。


オブジェクトのプロパティのプロパティをバッチで設定します

複数のプロパティのプロパティを一度に設定する必要がある場合は、Object.defineProperties() ステートメントを使用できます。このステートメントは、変更されたオブジェクトを返します。

コードをコピー コードは次のとおりです。

Object.defineProperties(a, { "y ":{値:79、書き込み可能:true、列挙可能:true、構成可能:true},
"z":{値:99、書き込み可能:true、列挙可能:true、構成可能:true}
});
console.log(a);//オブジェクト {y=79, z=99}

プロパティ属性設定ルール

プロパティ属性を変更する場合は、次の規則に従う必要があります。ルールに違反すると、JavaScript は TypeError を報告します:

オブジェクトが拡張可能でない場合は、既存のプロパティのプロパティのみを変更でき、新しいプロパティを追加することはできません。
プロパティの設定可能な属性が false の場合、設定可能な属性と列挙可能な属性の値は変更できません。書き込み可能な属性については、true から false に変更できますが、false から true に変更することはできません。 。プロパティが getter および setter によって定義されている場合、getter メソッドおよび setter メソッドは変更できません。
プロパティの構成可能属性と書き込み可能属性が両方とも false の場合、プロパティ値は変更できません。プロパティの writable 属性が false であっても、configurable 属性が true の場合でも、プロパティ値は変更できます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート