JS属性可分为两种类型
① 数据属性
只是简单存储了一个值
② 存取器属性
最大的特点是在设置、获取属性值的时候能够做一些其他的操作
设置存取器属性的两种方式
① 直接在对象中设置
let obj = {
count: 5, // 普通的数据属性
// index为存取器属性
_index: 1, // _index用来存储index值
set index(value) {
console.log("可以在设置index值之前,做一些其他的操作");
this._index = value;
console.log("index值设置完毕");
console.log("可以在设置index值之后,做一些其他的操作");
},
get index() {
console.log("可以在获取index值之前,做一些其他的操作");
return this._index;
}
}
②对象已存在的情况下,利用Object.defineProperty方法追加存取器属性及特性
let person = { // person对象已存在
name: 'wuwu',
age: 18
}
let _sex = 'nv'; // _sex用来存储sex值
Object.defineProperty(person, 'sex', {
// value: _sex, // 与get方法不能共存,因为获取value值等同于调用get方法
// writable: true, // 与set方法不能共存,因为有set方法默认就是可写的
enumerable: true, // 是否可遍历
configurable: true, // 是否可删除
set(value) {
console.log("可以在设置index值之前,做一些其他的操作");
_sex = value;
console.log("index值设置完毕");
console.log("可以在设置index值之后,做一些其他的操作");
},
get() {
console.log("可以在获取index值之前,做一些其他的操作");
return _sex;
}
});
3.利用Object.getOwnPropertyDescriptor()方法获取属性的特性
Object.getOwnPropertyDescriptor(person, 'sex');