起始
Get:指读取属性时调用的函数。
Set:指写入属性时调用的函数。
困惑
因为一开始不是很懂这个方法,所以一直纠结于get方法:我设置了新的值,我怎么获取这个新的值?
let data1 = {
name:'小明',
age:18
}
Object.defineProperty(data1,'age',{
set:function(newAge){
console.log(this.name+'现在'+newAge+'岁')
},
get:function(){
return 18;
}
})
//赋值
data1.age = 18;
data1.age = 19;
console.log(data1.age)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
执行
在这里看到,我们获取data.age1的时候只能是得到18,因为本质上data1={ name: '小明', age: [Getter/Setter] },也就是说我在使用data1.age方法时候是在使用get方法,而get方法返回值一直是18,所以我一直获取不了最新的值。不过这里也是钻了一下牛角尖,然后通过别的思路(赋值)想到了一种实现方法,并且网上查阅资料的时候说这也是高三上面的例子。
转换思想
let data = {
name:'小明',
_age:18
}
Object.defineProperty(data,'age',{
set:function(newAge){
this._age = newAge;
console.log(this.name+'现在'+newAge+'岁')
},
get:function(){
return this._age
}
})
//赋值
// data.age = 18;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
看到这里大家就应该明白了,我是通过data中添加一个属性_age来变相的达到数据同步。
function setAge(){
data.age = parseFloat(data.age) +1;
if(parseFloat(data.age)>20){
return false;
}
setTimeout(() => {
setAge()
}, 1000);
}
setAge()
1
2
3
4
5
6
7
8
9
10
最终
---------------------
作者:天空影
来源:CSDN
原文:https://blog.csdn.net/jx950915/article/details/82885433
版权声明:本文为博主原创文章,转载请附上博文链接!