JSオブジェクト向けオブジェクト属性の属性

2599 ワード

ECMAScriptの定義では、オブジェクトのプロパティは2つあります.1つはデータのプロパティで、もう1つはアクセサのプロパティです.
JSには基本的なデータ型とオブジェクトがあり、オブジェクトの属性もこれらのタイプにほかならないが、オブジェクトの属性としては、これらの属性自体にも特殊な属性が多く、属性の種類によっても属性の属性が多少異なることが知られている.次に、オブジェクトのプロパティの2つのカテゴリについて説明します.
 

1.データ属性


この属性には、データ値を格納する属性[[Value]]が含まれており、その動作を記述する属性は4つあります.
  • [[Configurable]:この属性はdelete文で属性を削除できるかどうか、属性の属性を変更できるかどうかを表します.デフォルトはtrueです.
  • [[Enumerable]:この属性は、for-inループを使用してオブジェクト属性を巡回するときにオブジェクトにアクセスできるかどうかを示します.デフォルトはtrueです.
  • [[Writable]:このプロパティは、プロパティの値を変更できるかどうかを示します.デフォルトはtrueです.
  • [[Value]]:この属性は、属性のデータ値を格納するために使用されます.

  •  
    
    var course = {
        name: "Operation System"
    }

     

    course , name ,name Configuralbe, Enumerable Writable true, Value "Operation System"。

     

    , Object.defineProperty() 。 , , , (descriptor). , 。

    
    Object.defineProperty(course, "name", {
        value: Assembler Language,
        writable: false
    })
    
    course.name = "English"
    alert(course.name) //Assembler Language

    course name writalbe false, value "Assembler Language", name , course name 。( )  name configurable false , ( configurable true)

    : Object.defineProperty() , , configuralbe, writable, enumerable false。

     

     

    2.アクセサのプロパティ

    , getter setter ( , getter , setter )。 , 。

    • [[Configurable]]: 。
    • [[Enumerable]]: 。
    • [[Get]]: 。
    • [[Set]]: 。

    : , Object.defineProperty()

     

    
    var person = {
        _age: 20
    };
    
    Object.defineProperty(person, "age", {
        get: function(){
            return this._age;
        },
        set: function(){
            this._age++;
        }
    })

    , person , _age 20, Object.defineProperty() person age , getter setter 。 person age _age 。 person.age , person _age 。