從屬性性質的角度分類可分爲「數據屬性」和「存取器屬性」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