前言:
大家肯定用过 用过对象自己定义的 get 和 set 方法,也肯定用过 Object.defineProperty 定义 的 get 和 set 方法,那么他们的区别是什么呢,现在给大家分享一下。
代码:
在对象字面量上定义的get 和set
let obj = {
get name() {
return '靖凡';
}
}
let address='';
Object.defineProperty(obj, "address", {
get() {
return address;
},
set(value) {
address = value;
}
});
obj.address = '北京丰台';
console.log(obj.name); // 靖凡
console.log(obj.address); // 北京丰台
上边代码,实现了对对象某个属性的读取和设置。
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
console.log(Object.getOwnPropertyDescriptor(obj, 'address'));
总结:
用对象字面量方式创建的对象绑定 get 和 set 的话 ,最终都是设置到了对象自身上边。
使用类创建对象,并定义的get 和set
class Student {
get type() {
return 'Student';
}
}
const obj = new Student();
console.log(obj.type);
// "Student"
console.log(Object.getOwnPropertyDescriptor(obj, 'type'));
// undefined
console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'type'));
// { configurable: true, enumerable: false, get: function get type() { return 'Student'; }, set: undefined }
总结:
当使用 get
关键字时,属性将被定义在实例的原型上,当使用Object.defineProperty()时,属性将被定义在实例自身上。