版权声明:非商业转载请附上地址与作者信息,谢谢! https://blog.csdn.net/jx950915/article/details/82885433
起始
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)
执行
在这里看到,我们获取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;
看到这里大家就应该明白了,我是通过data
中添加一个属性_age
来变相的达到数据同步。
function setAge(){
data.age = parseFloat(data.age) +1;
if(parseFloat(data.age)>20){
return false;
}
setTimeout(() => {
setAge()
}, 1000);
}
setAge()