除了传统的定义对象属性的方式外,JS 中还提供了 Object.defineProperty()方法来定义对象的属性。
一、基础语法
Object.defineProperty(对象, '键名', {// ... 四个属性,两个方法})
二、四个属性
通过 Object.defineProperty() 方法定义的属性,默认情况下不能修改、不能删除、不能遍历。
1、value
value用来设置当前键所对应的值。
const student = {};Object.defineProperty(对象, 'name', {value: '张三'})student.name = '李四';delete student.name;for(const key in student) {console.log(key);}
2、writable
writable 可以用来设置是否可修改,默认 false。
const student = {};Object.defineProperty(对象, 'name', {value: '张三',writable: true, // 可修改})student.name = '李四';
3、configurable
configurable,可以用来设置是否可删除,默认 false。
const student = {};Object.defineProperty(对象, 'name', {value: '张三',configurable: true, // 可删除})delete student.name;
4、enumerable
enumerable,可以用来设置是否可遍历,默认 false。
const student = {};Object.defineProperty(对象, 'name', {value: '张三',enumerable: true, // 可遍历})for(const key in student) {console.log(key);}
三、两个方法
1、get
当我们访问指定的键时,会触发对应的 get 方法。同时,get 方法的返回值会作为当前键对应的属性值。
const student = {name: '张三'};const value = student.name;Object.defineProperty(对象, 'name', {get() {return value;}})
2、set
当我们修改指定的键时,会触发对应的 set 方法。同时,set 方法可以通过参数来接收到用户想要修改的新值。
const student = {name: '张三'};const value = student.name;Object.defineProperty(对象, 'name', {get() {return value;},set(newValue) {value = newValue;}})
