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)
}

浙公网安备 33010602011771号