数据属性
- configurable
- 属性是否可以通过 delete 删除并重新定义
- 是否可以修改他的特性(属性是否可以被配置)
- 是否可以把它改为访问器属性
- 默认 true
- enumerable 属性是否可以通过 for-in 循环返回 默认true
- writable 属性值是否可以被修改 默认 true
- value 属性的实际值
- 在属性被定义为不可配置之后,就不能再修改除了writable之后的值了!!!!
访问器属性
- configurable
- enumerable
- get 读取该属性时调用 get 并返回结果
- set (newvalue) 修改该属性时会将修改的值传入 set
对象方法
-
Object.defineProperty 定义单个属性
// 使用这种方法不定义 configurable enumerable writable时,会默认为false
Object.defineProperty(obj,key,{
configurable:true,
enumerable:true,
writable:true,
value:"value"
})
// getter 和 setter 的使用
Object.defineProperty(obj,key,{
// get会在该属性被读取时调用
get(){
return this.key
},
// set 会在该属性被修改时调用
set(newValue){
this.key = newValue
}
})
-
Object.defineProperties 定义多个属性
let book = {}
// 使用这种方法不定义 configurable enumerable writable时,会默认为false
Object.defineProperties(book,{
edition:{
value:1,
writable:true
},
year_:{
value:2017
},
year:{
get(){
return this.year_
},
set(newValue){
if(newValue > 2017){
this.year_ = newValue;
this.edition += (newValue - 2017)
console.log(this.edition);
}
}
}
})
原文链接:http://www.cnblogs.com/xiayuxiayuxia/p/15770283.html