Object.defineProperty
定義物件屬性,調整屬性特徵(請牢記!!)
// 定義物件屬性,調整屬性特徵
Object.defineProperty
那特徵有哪些呢??
改值
var family = {
a: 1,
b: 2,
c: 3,
}
console.log(family); // 1 2 3
// Object.defineProperty(物件,屬性,參數)
Object.defineProperty(family,'a',{
// 預設都為 true
value: 4,
writable : true,
configurable : true,
enumerable : true,
})
console.log(family); // 4 2 3
可否寫入
var family = {
a: 1,
b: 2,
c: 3,
}
console.log(family); // 1 2 3
Object.defineProperty(family,'a',{
writable : false, // 不可寫入
configurable : true,
enumerable : true,
})
family.a = 10; // 靜默錯誤
console.log(family); // 因不可寫入 所以一樣為 1 2 3
可否被刪除
var family = {
a: 1,
b: 2,
c: 3,
}
console.log(family); // { a : 1 , b : 2 , c : 3}
Object.defineProperty(family,'b',{
configurable : false, // 不可刪除
})
delete family.a;
console.log(family); // { b : 2 , c : 3}
delete family.b;
console.log(family); // { b : 2 , c : 3}
可否被列舉
var family = {
a: 1,
b: 2,
c: 3,
}
Object.defineProperty(family,'c',{
enumerable : false,
})
for(var key in family){
console.log('列舉'+key); // 列舉 a 列舉 b
}
淺層保護
Object.defineProperty 只能做到淺層保護
var family = {
a: 1,
b: 2,
c: 3,
}
Object.defineProperty(family,'d',{
value: {},
writable : false,
})
family.d = 1;
console.log(family); // {} , d 一樣為空物件
// 但禁止寫入只限制 d 此屬性
// 由於物件有傳參考的特性 所以我們可以針對裡面的值來做設定
var family = {
a: 1,
b: 2,
c: 3,
}
Object.defineProperty(family,'d',{
value: {},
writable : false,
})
family.d = 1;
console.log(family); // {} , d 一樣為空物件
// 但禁止寫入只限制 d 此屬性
// 由於物件有傳參考的特性 所以我們可以針對裡面的值來做設定
family.d.a = 10;
console.log(family); // d: { a : 10}
一次定義大量屬性
var family = {
a: 1,
b: 2,
c: 3,
}
Object.defineProperties(family,{
a:{
writable: false,
},
b:{
configurable: false,
},
c:{
enumerable: false,
}
})
那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷