js Object的屬性 Configurable,Enumerable,Writable,Value,Getter,Setter
阿新 • • 發佈:2019-02-13
物件的資料屬性
Configurable,Enumerable,Writable,Value
var person = {}
Object.defineProperty(person,'name',{
configurable:false,//能否使用delete、能否需改屬性特性、或能否修改訪問器屬性、,false為不可重新定義,預設值為true
enumerable:false,//物件屬性是否可通過for-in迴圈,flase為不可迴圈,預設值為true
writable:false,//物件屬性是否可修改,flase為不可修改,預設值為true
value:'xiaoming' //物件屬性的預設值,預設值為undefined
});
//value
console.log(person);//xiaoming,預設value
//writable
person.name="qiang";
console.log(person);//xiaoming,不可修改value
//enumerable
for(var i in person){
console.log(person[i]) //無結果,不可迴圈
}
//configurable
delete person.name
console.log(person.name)//xiaoming,不可刪除
Object.defineProperty(person,'name' ,{
configurable:true //不可修改,將丟擲錯誤
});
訪問器屬性
getter,setter
var book = {
_year: 2004,//屬性前面加_,代表屬性只能通過物件方法訪問
edition: 0
}
Object.defineProperty(book,'year',{
get: function(){
return this._year;
},
set: function(newValue){
if(newValue > 2004){
this._year = newValue;
this .edition += newValue - 2004
}
}
});
console.log(book.year)//2004
book.year = 2006;
console.log(book.year)//2006
console.log(book.edition)//2
定義多個屬性
Object.defineProperties
var book = {};
Object.defineProperties(book, {
_year: {
value:2004,
writable:true
},
edition: {
value: 0,
writable:true
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004
}
}
}
});
console.log(book.year) //2004
book.year = 2006;
console.log(book.year) //2006
console.log(book.edition) //2
讀取屬性
var book = {};
Object.defineProperties(book, {
_year: {
value:2004,
writable:true
},
edition: {
value: 0,
writable:true
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004
}
}
}
});
console.log(book.year) //2004
book.year = 2006;
console.log(book.year) //2006
console.log(book.edition) //2
//讀取屬性
var descriptor__year = Object.getOwnPropertyDescriptor(book,'_year');
var descriptor_year = Object.getOwnPropertyDescriptor(book,'year');
console.log(descriptor__year )
console.log(descriptor_year )