Object.defineProperty 监听拦截中存在的一些问题
@:Vue框架中监听数组属性值的变化
Object.defineProperty(x, '?' , {})无法指定数组中需要监听的属性值
这时我们通过变异的方法来处理(拦截push方法)
🌰
let arr = [1,2,3]
let push = Array.prototype.push;
Array.prototype.push = function (...args) {
console.log( '变异方法' ) // 监听处理
push( ...args ) // 这里需要处理this指向问题
push.call( this, ...args )
}
arr.push(args)
上面通过重写push方法来处理,当有push方法调用时会执行我们自定义的push方法,每次有push动作都会被监听到了
上面只是一个栗子
数组方法: push pop shift unshift splice sort reverse 都可以用这种方法处理
有些数组方法为啥没改写?
这是因为像filter map 这些方法 并不是改原有数组,而是返回一个新数组
本人的一点总结,如有不足之处,多多指点
网友评论