object.defineproperty用法(get,set)

本文深入探讨了JavaScript中Getter和Setter方法的使用技巧,通过实例展示了如何利用这些特性实现属性值的动态更新与访问控制,特别关注了数据同步的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起始
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
最终

--------------------- 
作者:天空影 
来源:优快云 
原文:https://blog.youkuaiyun.com/jx950915/article/details/82885433 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值