《高級程序設計》整理(三)- - -JS對象(1)

JS對象

一、屬性類型

  1. 數據屬性

    • [[Configurable]]
      表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,能否把屬性修改爲訪問器屬性。直接在對象上定義的屬性,默認值爲true。

    • [[Enumerable]]
      表示能否通過for-in循環返回屬性。直接在對象上定義的屬性,默認值爲true。

    • [[Writable]]
      表示能否修改屬性的值。直接在對象上定義的屬性,默認爲true。

    • [[Value]]
      包含這個屬性的數據值;讀取屬性值的時候,從這個位置讀取;寫入屬性值的時候,把值保存在這裏。默認爲undefined。

  2. 訪問器屬性- 屬性有getter和setter方法,(讀/寫屬性)。

    • [[Configurable]]
      表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,能否把屬性修改爲訪問器屬性。直接在對象上定義的屬性,默認值爲true。

    • [[Enumerable]]
      表示能否通過for-in循環返回屬性。直接在對象上定義的屬性,默認值爲true。

    • [[get]]
      在讀取屬性時調用的函數;默認值爲undefined。

    • [[set]]
      在寫入屬性時調用的函數;默認值爲undefined。

    Object.defineProperty(obj, prop, descriptor):方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。

    var person = {}
    Object.defineProperty(person, 'name', {
            writable:false,
            value:jiaying
    });
    person.name = zeqing  //嚴格模式下報錯 

    Object.defineProperties(obj, props):方法直接在一個對象上定義新的屬性或修改現有屬性,並返回該對象。

    var person = {}
    var obj = {};
    Object.defineProperties(obj, {
        'property1': {
            value: true,
            writable: true
    },
        'property2': {
            value: 'Hello',
            writable: true
    }, 
        'property3': {
            get: function() {
                return this['property2']
            },
            set: function(newValue) {
                this['property2'] = newValue;
                this['property1'] = false;
            }
    }
    // etc. etc.
    })

    -Object.getOwnPropertyDescriptor(obj, prop)方法,可以取得給定屬性的描述符

    var person = {};
    Object.defineProperties(person, {
        _name: {
            value: "CC",
            writable: false
        },
        _age: {
            value: 23,
            writable: true
        },
        age: {
            get: function() {
                return this._age
            },
            set: function(newValue) {
                this._age = newValue;
            }
        }     
    });
    var descriptor = Object.getOwnPropertyDescriptor(person, "_age");
    console.log(descriptor.value);       //"23"
    console.log(descriptor.writable);    //true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章