美文网首页
数组劫持

数组劫持

作者: zdxhxh | 来源:发表于2019-10-31 12:30 被阅读0次

    数组数据的观察

    在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方法
    • 后续操作就可以为所欲为了

    相关文章

      网友评论

          本文标题:数组劫持

          本文链接:https://www.haomeiwen.com/subject/tkzzvctx.html