微信小程序——数据劫持代理

index.html 

 index.js

// Vue数据劫持代理

//模拟Vue中data选项
let data = {
    username:'小镭',
    age:3
}

// 模拟组件的实例
let _this={}

// 利用object.defineProperty()
for(let item in data){
    console.log(item,data[item]);
    Object.defineProperty(_this,item,{
        // get作用:用来获取扩展属性值,当获取该属性时调用get方法
        get(){
            console.log('get()');
            return data[item]
        }
    })
}

console.log(_this)

 当要获取访问age或username的值时,才会调用get()方法,打印get()

若要修改data中的username的 值,可以直接通过_this.username修改吗?

答案是:不可以 

(没有修改成功,username还是“小镭") 

 

可以通过set方法修改值

 

for(let item in data){
    console.log(item,data[item]);
    Object.defineProperty(_this,item,{
        // get作用:用来获取扩展属性值,当获取该属性时调用get方法
        get(){
            console.log('get()');
            return data[item]
        },
        //set作用:监视扩展属性的,只要已修改就调用
        set(newValue){
            console.log('set()',newValue);
            // _this.username=newValue;   千万不要在set方法中修改当前扩展属性的值,会出现死循环
            data[item] = newValue;
        }
    })
}

(修改成功!) 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值