javascript数据劫持代理

let data = {
    username: "jxnuzhouguohong",
    age: 39
}

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

// 利用Object.defineProperty()
for (let item in data) {
    Object.defineProperty(_this, item, {
        get() {
            console.log("get()");
            return data[item];
        },
        set(newValue) {
            console.log("set()", newValue);
            // 千万不要在set方法中修改当前扩展属性的值,会出现死循环
            // _this.username = newValue;
            data[item] = newValue;
        }
    })
}


console.log(_this);
// 通过Object.defineProperty的get方法添加的扩展属性不能直接对象.属性修改,但是会调用set方法,然后在set方法里面 data[item] = newValue;
_this.username = "just";
console.log(_this);

let just = {
    name : "jxnuzhouguohong",
    age : 39,
    set info(name){
        this.name = name;
    },
    get info(){
        return this.name + this.age;
    }
}

console.log(just);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值