-
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');