object.defineproperty用法(get,set)

版权声明:非商业转载请附上地址与作者信息,谢谢! 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()

最终

最终效果

猜你喜欢

转载自blog.csdn.net/jx950915/article/details/82885433
今日推荐