js中可以定义对象属性,也可以读取对象属性。下面进行详细讲解
属性分两种:数据属性和访问器属性。
1,数据属性
Configurable-表示属性是否可以通过 delete 删除并重新定义
Enumerable-表示属性是否可以通过 for-in 循环返回
Writable-表示属性的值是否可以被修改
Value-包含属性实际的值
2. 访问器属性
Configurable-表示属性是否可以通过 delete 删除并重新定义
Enumerable-表示属性是否可以通过 for-in 循环返回
Get-获取函数
Set-设置函数
3,读取对象属性
使用 Object.getOwnPropertyDescriptor()方法可以取得指定属性的属性描述符。这个方法接 收两个参数:属性所在的对象和要取得其描述符的属性名。返回值是一个对象,对于访问器属性包含 configurable、enumerable、get 和 set 属性,对于数据属性包含 configurable、enumerable、 writable 和 value 属性
Object.getOwnPropertyDescriptor():,获取指定对象的所有属性的属性描述明细
//1,数据属性
let person = {};
Object.defineProperty(person, "name", {
writable: false, //不可写
configurable: true, //不可删,非严格模式下无效
value: '老王'
})
person.name = '小白' //无效
console.log(person); //打印:老王
let book = {
year_: 2017,
edition: 1
};
Object.defineProperty(book, "year", {
get() {
this.year_
},
set(newValue) {
if (newValue > 2017) {
this.year_ = newValue
this.edition += newValue - 2017
}
}
})
book.year = 2018
console.log(book.year); //undefined
console.log(book.edition); //2
//3,定义多个属性
let table = {}
Object.defineProperties(table, {
year_: {
value: 2017
},
edition: {
value: 1
},
year: {
get() {
return this.year_
},
set(newValue) {
if (newValue > 2017) {
this.year_ = newValue
this.edition += newValue - 2017
}
}
}
})
book.year = 2019
console.log(table); //{year_: 2017, edition: 1}
//3,Object.getOwnPropertyDescriptor(),获取指定属性的属性描述符
let descriptor = Object.getOwnPropertyDescriptor(table, 'year_')
console.log(descriptor); //{value: 2017, writable: false, enumerable:
false, configurable: false}
//4,Object.getOwnPropertyDescriptors(),获取指定对象的所有属性的属性描述明细
let descriptors = Object.getOwnPropertyDescriptors(table);
console.log(descriptors);