js中對象的屬性的分類及權限
對象的屬性分類
從屬性性子的角度分類可分為“數據屬性”和“存取器屬性”
數據屬性
定義
var o = {
key0: value0
}
運用
o.key0 // 獲得value0
o.key0 = newValue0 // 設置新值
存取器屬性
定義
var o = {
temp: 'temp',
// 只能對要領設置存取器
get key0 () {
return 'value0'
},
set key0 (newValue) {
this.temp = 'newTemp'
}
}
運用
o.key0 // 獲得value0
o.key0 = newValue0 // 設置新值
發明這兩個屬性在定義時有區分,在運用時沒有區分。
屬性的權限
設置
Object.defineProperty(o, 'key0', {
value: 'value0', // 值
writable: true, // 可寫入
enumerable: true, // 可羅列
configurable: true // 可設置
})
在設置屬性權限為false
時是末了一次修正屬性值的時刻。設置屬性可寫權限為false
后就不能再修正了。
操縱對象的權限
擴大
設置不可擴大后就不能再擴大該對象的屬性了。
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