js Object.definePropeoty劫持数据|proxy劫持数据

劫持数据

Object.defineProperty劫持数据

//object.defineProprety不能直接去监听劫持,因为他会内部循环,导致内存泄漏
let person = {
    name : "小编",
    age : 22,
    sex : "男",
    hobby:"花姑娘"
}
Object.keys(person).forEach((item)=>{
    hijack(person,item,person[item])
})
function hijack(object,key,value){
    Object.defineProperty(object,key,{
        get(){
            console.log("执行了get方法");
            return value
        },
        set(newValue){
            if(value != newValue){
                console.log("执行了set方法");
                value = newValue
            }
        }
    })
}

proxy劫持数据

const _proxy = (object, ...prototypes) => {
  // 补全代码
  prototypes.forEach(
    (item) => (object = Object.assign(object, { [item]: "" }))
  );
  let proxy = new Proxy(object, {
    get(target, key) {
      if (prototypes.includes(key)) {
        return "noright";
      } else {
        return target[key];
      }
    },
    set(target, key, value) {
      target[key] = value;
    },
  });
  return proxy;
};

版权声明:本文为weixin_51666715原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。