ECMAScript オブジェクトには、データ属性とアクセサー属性という 2 つの属性があります。次に、2 つの属性をそれぞれ分析します。
1. データ属性
データ属性には、データ値の場所が含まれます。この場所では値の読み取りと書き込みが可能です。データ属性には、その動作を説明する 4 つの特性があります。
[ [ Configurable ] ] delete による属性の削除によって属性を再定義できるかどうか、属性の特性を変更できるかどうか、または属性をアクセス属性として変更できるかどうかを示します。デフォルトは true です
[ [ Enumerable] ] for-in ループを通じて属性を返すことができるかどうかを示します。デフォルトは true です
[ [ Writable ] ] 属性の値を変更できるかどうかを示します。デフォルトは true です
[ [ Value ] ] この属性の属性値が含まれます。属性を読み取る場合はこの場所から読み取り、属性を書き込む場合は新しい値をこの場所に保存します。デフォルトは未定義です
例:
var p = {}; Object.defineProperty(p, "name", { writable: false, value: 'nihao' })
2. アクセサー プロパティにはデータ値が含まれません。アクセサー プロパティを読み取る場合、これらの関数にはゲッター関数とセッター関数のペアが含まれます。が呼び出され、この関数は有効な値を返す役割を果たします。アクセサー属性を書き込むとき、セッター関数が呼び出され、新しい値が渡されます。この関数は、データの処理方法を決定する役割を果たします。[ [ Configurable ] ] は、属性を削除することで属性を再定義できるかどうかを示します。削除、属性の特性を変更できるかどうか、または属性をアクセス属性に変更できるかどうか。デフォルトは true です
[ [ Enumerable] ] for-in ループを通じて属性を返すことができるかどうかを示します。デフォルトはtrueです
[ [ Get ] ] 属性を読み込むときに呼び出される関数、デフォルトは未定義です
[ [ Set ] ] 属性を書き込むときに呼び出される関数、デフォルトは未定義です
eg:
var p = {get: 0}; Object.defineProperty(p, "name", { get: function (){ console.log('get'); return this.get; }, set: function (newVal) { console.log('set'); this.get = newVal; } })
戻り値はオブジェクトであり、configurable、enumerable、get、set の 4 つの属性にアクセスします。
それが数値属性の場合は、返されます。オブジェクト属性は設定可能であり、列挙可能、書き込み可能、値の 4 つのプロパティです
備考: Object.defineProperties() 関数は複数のプロパティを定義できます
例:
var p = {get: 0}; Object.defineProperties(p, {"name", { get: function (){ console.log('get'); return this.get; }, set: function (newVal) { console.log('set'); this.get = newVal; } }, "age": { writable: true, value: 11 } })
ECMAScript 5_基礎知識のプロパティ記述子の詳細な説明
以上がECMAScript のオブジェクトの 2 つのプロパティの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。