ECMAScript中的两种属性:数据属性和访问属性
- 数据属性:
- [[Configurable]]:能否通过delete删除属性从而重新定义属性,能否修改属性特性,能否把属性修改为访问器属性。默认true
- [[Enumerable]]:能否通过for-in循环返回属性,默认true
- [[Writable]]:能否修改属性的指
- [[Value]]:包含属性的数据值,默认undefined
修改以上值,Object.defineProperty()
var person={};
Object.defineProperty(person,"name",{
writable:false,
value:'hh'
})
console.log(person.name);
person.name="gg";
console.log(person.name)
- 访问器属性
- [[Configurable]]:能否通过delete删除属性从而重新定义属性,能否修改属性特性,能否把属性修改为访问器属性。默认true
- [[Enumerable]]:能否通过for-in循环返回属性,默认true
- [[Get]]:读取时调用
- [[Set]]:写入时调用
不包含数据值,包括getter和setter(非必需)
var book={
_year:2020,
edition:1
}
Object.defineProperty(book,'year',{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2020;
}
}
})
book.year=2021;
console.log(book.edition)
定义多个属性的方法
var book2={};
Object.defineProperties(book2,{
_year:{
value:2004
},
edition:{
value:1
},
year:{
get:function(){
},
set:function(){
}
}
})
读取属性的方法
var descriptor=Object.getOwnPropertyDescriptor(book,'_year');
console.log(descriptor)