zoukankan      html  css  js  c++  java
  • vue源码中数组方法的重写

    重写数组方法

    var arrayProto = Array.prototype;
    // 新建一个继承于Array的对象
    var arrayMethods = Object.create(arrayProto);
    // 数组拥有的方法
    var methodsToPatch = [
      "push",
      "pop",
      "shift",
      "unshift",
      "splice",
      "sort",
      "reverse",
    ];
    methodsToPatch.forEach(function (method) {
      // 缓冲原始数组的方法
      var original = arrayProto[method];
      // 利用Object.defineProperty对方法的执行进行改写
      def(arrayMethods, method, function mutator(val) {
        var args = [],
          len = arguments.length;
        while (len--) args[len] = arguments[len];
        // 执行原数组方法
        var result = original.apply(this, args);
        var inserted;
        switch (method) {
          case "push":
          case "unshift":
            inserted = args;
            break;
          case "splice":
            inserted = args.slice(2);
            break;
        }
        //在此处进行通知
        return result;
      });
    });
    //进行监听
    function def(obj, key, val, enumerable) {
      Object.defineProperty(obj, key, {
        value: val,
        enumerable: !!enumerable,
        writable: true,
        configurable: true,
      });
    }
    
  • 相关阅读:
    《Linux就该这么学》第十二课
    《Linux就该这么学》第十一课
    《Linux就该这么学》第十课
    《Linux就该这么学》第九课
    《Linux就该这么学》第八课
    模板层
    路由层
    git的使用
    属性选择器
    高级选择器
  • 原文地址:https://www.cnblogs.com/heihei-haha/p/14574353.html
Copyright © 2011-2022 走看看