收集访问器属性get/set的使用场景?

理解:访问器属性,不含数值,取值和设置值通过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、监听访问器属性的修改去操作其它业务逻辑

但是这样还是不够,请问你们在操作业务逻辑中,有类似的用过这俩属性么?

阅读 2.8k
1 个回答

业务场景那可太多了
主要还是从技术层面出发 它可以实现监听 设置等功能 然后去拓展业务
你这样去问业务场景 无头无尾的 也没个具体回答

但你这么问了 举个栗子. 购买物品 物品价格 首页 和 详情页的数据同步 就可以用这个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题