对象属性分两种: 数据属性和访问器属性
1.1数据属性,
那数据属性,本身有4个属性
Configurable: 是否可以通过delete删除并重新定义,默认ture
Enumerable: 是否可以通过for-in循环,默认ture
Writable: 是否可以被修改,默认ture
Value: 包含属性实际的值,比如下列的Nicholas,默认值是undefined
let person ={
name: 'Nicholas' // name就是数据属性
}
1.2新建对象,并设置对象数据属性,可以通过Object.defineProperty定义
let person = {}
Object.defineProperty(person,"name",{
configurable:false,
value:"Nicholas"
})
// 注意Object.defineProperty定义的属性,如果不写他的数据属性,默认都是false
2.2访问器属性
1.1访问器属性,本身有4个属性
Configurable: 是否可以通过delete删除并重新定义,默认ture
Enumerable: 是否可以通过for-in循环,默认ture
Get: 获取函数,在读取属性时调用,默认 undefined
Set:设置函数,在写入属性时调用,默认 undefined
1.2例子用访问器属性 写一个属性
let book = {
year_: 2017,
edition: 1,
}
Object.defineProperty(book, "year", {
get() {
return this.year_; //返回一个值。你自己可以随意定义
},
set(newValue) {
this.year_ = newValue;
if(newValue > 2017) {
this.edition += newValue -2017
} // 设置函数,你可以随意定义,其他属性值得变化
}
})
// es6写法
let person = {
name_:"",
get name() {
reutrn this.name_
},
set name(newName) {
this.name_ = newName
}
}
3.1读取属性,用Object.getOwnPropertyDescriptor和Object.getOwnPropertyDescriptors