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