ホームページ  >  記事  >  ウェブフロントエンド  >  ECMAScript のオブジェクトの 2 つのプロパティの簡単な分析

ECMAScript のオブジェクトの 2 つのプロパティの簡単な分析

不言
不言オリジナル
2018-07-17 14:52:421025ブラウズ

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;
    }
})

3. 属性の読み込みの特徴。 Object.getOwnPropertyDescriptor (属性が配置されているオブジェクト、属性名);

戻り値はオブジェクトであり、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。