vue2数据劫持(defineproperty)

244 阅读1分钟
/*  obj:目标对象
 *  prop:属性名
 *  descriptor:描述
 */
Object.defineProperty(obj, prop, descriptor)
let person = {
    name:'张三',
    sex:'男',
    }
Object.defineProperty(person,age,{
    value:18,
    enumerable:true, // 数据是否可以枚举, 默认false
    writable:true,  // 数据是否可修改,默认false
    configurable:true // 数据是否可以被删除,默认false
})
console.log(person) // {name:'张三',sex:'男',age:18}
console.log(Object.keys(person)) // ['name','sex']   defineproperty数据不可枚举
let number = 19;
let person = {
    name:'张三',
    sex:'男',
    }
Object.defineProperty(person,age,{
    // 当person对象的age属性被读取的时候调用,返回age的值
    get(){
        return number
    },
    // 当修改person对象的age属性的值时调用,并收到修改的值
    set(value){
        number = value
    }

})

数据代理:通过一个对象代理对另一个对象中属性的操作

let obj = { x: 100 };
let obj2 = { y: 300 }

Object.definePropetry(obj2,'x',{
    get(){
        return obj.x
    },
    set(value){
        obj.x = value
    }
})

obj2.x = 500;
console.log(obj.x) // 500