描述:
JS中set和get方法实现sum的合计,如我们:
/*
* 访问器属性
* 1、 当给一个属性设置值时,可以写入多条语句,可以解决若干个问题
* 设置值等同于执行一个函数,同样获取值时也可以执行一个函数
* 解决多个问题
* 2、可以设置该属性是否只读或者只写
* 如果只有setter,那就是只写,不可获取该属性
* 如果只有getter,那就是只读,不能修改或者设置该属性
*
*
* 场景:
* 1、前端和服务端通信后获得发来数据结果时,通过setter属性可以直接
* 设置返回过来的结果来改变显示内容,只能使用这个数据设置一个入口
* 来完成改变多个显示内容的变化
* 2、从外容器将数据传递进入子容器时,或者从外向内设置值。或者给组件
* 设置初始值时
*
*
*
* */
- 解读——>
configurable:false, //能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true
enumerable:false, //对象属性是否可通过for-in循环,flase为不可循环,默认值为true
writable:false, //对象属性是否可修改,flase为不可修改,默认值为true
value:'xxx' //对象属性的默认值,默认值为undefined
代码:
var obj2={
sum:0,
_a:0,
set a(value){
if(isNaN(Number(value)))return;
this._a=value;
this.sum+=Number(value);
},
get a(){
return this.sum;
}
};
obj2.a=5;
obj2.a=6;
obj2.a=7;
obj2.a=8;
console.log(obj2.a,obj2.sum);
将属性sum衍变为方法,介于属性和方法之间,从而解决了一个原来要设置方法才能解决的问题。
便与理解,类似于这样:
var obj3={
a:0,
sum:0,
addA:function (value) {
this.a=value;
this.sum+=value;
}
};
obj3.addA(5);
obj3.addA(6);
obj3.addA(7);
obj3.addA(8);
console.log(obj3.a,obj3.sum);
但同时这样写,暴露了很多缺陷,a、sum变量,addA函数会暴露在外面。
而第一种写法通过setget的写与不写可以实现可读可写或者非可读可写等等的设置,如这篇文章开篇对访问器的解读,便与理解可以看一下。