理解:访问器属性,不含数值,取值和设置值通过get/set函数对实现;
主要用法:设置访问器属性,动态修改其它属性,以及监听属性的修改做些其它操作
part1、监听对象值的改变以实现其他操作
对象属性的改变,可以通过访问器属性getter、setter监听
var obj = {
count: 0
}
Ojbect.defineProperty(obj, 'count', {
set(value) {
localStorage.setItem( '_count',value);
}
});
obj.count = 1;
console.log(localStorage); //{_count: 1}
理解:
- 对象属性的描述对象中若是有了get/set,就是访问器属性了
- 定义的访问器属性最好不要与原属性同名,否则get方法拿到当前对象值时会有死循环;
- 给对象属性赋值时可以拿到监听,从而触发自己的处理
part2、直接在对象里定义get/set
var obj = {
year: 2019,
month: 5,
get date() {
return this.year + '-'+ this.month;
},
set date(yearMonth){
var arr = yearMonth.split('-');
this.year = arr[0];
this.month = arr[1];
}
};
obj.date; //2019-5
obj.date = '2012-12';
obj.date; //2012-12
理解:定义的访问器属性,去操作普通的数据属性
part3、在类里定义get/set
访问器属性是归属于对象,函数同样为对象,依然可以定义访问器属性
class Person{
constructor(firstName, lastName){
this.firstName = firstName;
this.lastName = lastName;
}
get fullName(){
return this.firstName + '-' + this.lastName;
}
set fullName(nameStr){
let arr = nameStr.split('-');
this.firstName = arr[0];
this.lastName = arr[1];
}
}
总结:归根结底,访问器属性无非就两作用:1、修改访问器属性动态修改相关联的数据属性;2、监听访问器属性的修改去操作其它业务逻辑
但是这样还是不够,请问你们在操作业务逻辑中,有类似的用过这俩属性么?
业务场景那可太多了
主要还是从技术层面出发 它可以实现监听 设置等功能 然后去拓展业务
你这样去问业务场景 无头无尾的 也没个具体回答
但你这么问了 举个栗子. 购买物品 物品价格 首页 和 详情页的数据同步 就可以用这个