数组数据的观察
在javascript中,忌讳改变内置函数的相关属性,所以对数组的劫持,一般是对push、shift、pop、unshift等操作进行重写。
// 拷贝一个数组原型
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);
// 将arrayMethods对象上的push转换成观察者对象
Object.defineProperty(arrayMethods, "push", {
value: function mutator() {
// 缓存原生方法
const original = arrayProto["push"];
original.apply(this, Array.from(arguments));
console.log("观察到数据变化", this);
}
});
思路如下 :
- 拷贝数组的原型方法
- 重新定义它的数据属性[[value]]
- 通过apply调用原生数组的push方法
- 后续操作就可以为所欲为了
网友评论