Object.defineProperty() 数据劫持

Object.defineProperty(object1, 'property1', {
  value: 42,
  writable: false
});

  基本用法 

Object.defineProperty(对象,想要修改或添加的key值,{
   configurable: false, //为true值才可被修改删除,默认为false
   enumerable: false, //为true值才可被遍历枚举到,否则无法出现在循环中
   value: '0',  //可以为任何有效的值,如数字,字符串,对象,方法之类的
   writable: false, // 只有为true时才可以直接被=赋值运算符修改
   get: function(), //当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。
   set: function()  ,//当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。
})

  由于在新建对象时直接对其中某个键进行数据劫持时,会由于此时该对象还未被定义,会出现undefined,可以使用定时器进行包裹,进行对象初始化

var all_date = {
    1001: {
        last_x: getX({id: 1001}),
    }
}

function getX(data) {
    setTimeout(function() {
        Object.defineProperty(all_date[data.id],"last_x",{
            get() {
                return all_date[data.id].now_x;
            }
        })
    },0)
}

  

posted @ 2022-03-22 11:27  月光怀古  阅读(188)  评论(0)    收藏  举报