js中對象的屬性的分類及權限

js中對象的屬性的分類及權限

對象的屬性分類

從屬性性質的角度分類可分爲「數據屬性」和「存取器屬性」this

數據屬性

定義code

var o = {
    key0: value0
}

使用對象

o.key0 // 獲得value0
o.key0 = newValue0 // 設置新值

存取器屬性

定義get

var o = {
    temp: 'temp',
    // 只能對方法設置存取器
    get key0 () {
        return 'value0'
    },
    set key0 (newValue) {
        this.temp = 'newTemp'
    }
}

使用it

o.key0 // 獲得value0
o.key0 = newValue0 // 設置新值

發現這兩個屬性在定義時有區別,在使用時沒有區別。io

屬性的權限

設置event

Object.defineProperty(o, 'key0', {
    value: 'value0', // 值
    writable: true, // 可寫入
    enumerable: true, // 可枚舉
    configurable: true // 可配置
})

在設置屬性權限爲false時是最後一次修改屬性值的時候。設置屬性可寫權限爲false後就不能再修改了。table

操做對象的權限

擴展

設置不可擴展後就不能再擴展該對象的屬性了。擴展

Object.isExtensible(o) // 獲得對象o是否可擴展
Object.preventExtensions(o) // 設置對象o爲不可擴展對象,且不可逆。再擴展o對象時不會報錯可是沒有執行結果。

封印

設置該對象的全部屬性可修改不可刪除不可添加。配置

Object.isSealed(o) // 獲得o對象是否封印。
Object.seal(o) // 封印該對象,且不可逆。

凍結

設置該對象的全部屬性不可添加不可修改不可刪除。

Object.isFrozen(o) // 獲得o對象是否凍結。
Object.freeze(o) // 設置o對象凍結,且不可逆。

小結

擴展 封印 凍結 是否可逆
添加 X X X X
修改 Y Y X X
刪除 Y X X X

2018/06/15 by stone

相關文章
相關標籤/搜索