监听数组的join方法并触发事件

作者: 小遁哥 | 来源:发表于2020-04-13 21:35 被阅读0次

大声的告诉我当你看到[1,2,3,4].join你会想到什么。

你有木有想到join是原型链上的方法呢?

你肯定以为我要说以下解决方案

   const join = Array.prototype.join;
    Array.prototype.join = function() {
      console.log("调用了join方法");
      return join.apply(this);
    };
    let arr1 = [1, 2, 3, 4],
      arr2 = [5, 6, 7, 8];
    console.log(arr1.join());
    console.log(arr2.join());
  },

非也非也,上面的特点是所有数组实例都受到了影响

如果只想指定的数组实例受影响呢?

    let arr1 = [1, 2, 3, 4],
      arr2 = [5, 6, 7, 8];
    arr1.join = function() {
      console.log("调用了join方法");
      return Array.prototype.join.apply(this);
    };
    console.log(arr1.join());
    console.log(arr2.join());

体会下面写法

    let arr1 = [1, 2, 3, 4],
      arr2 = [5, 6, 7, 8];

    function wrapper(arr, name) {
      let origin = arr[name];
      return function() {
        console.log("调用了join方法");
        return origin.apply(this);
      };
    }
    arr1.join = wrapper(arr1, "join");
    console.log(arr1.join());
    console.log(arr2.join());

origin === Array.prototype.jointrue

气球.gif

触发自定义事件

    let arr1 = [1, 2, 3, 4],
      arr2 = [5, 6, 7, 8];
    const JOIN_EVENT_NAME = "array.join";
    arr1.join = function() {
      console.log("调用了join方法");
      window.dispatchEvent(new Event(JOIN_EVENT_NAME));
      return Array.prototype.join.apply(this);
    };
    window.addEventListener(JOIN_EVENT_NAME, function() {
      console.log(`触发了${JOIN_EVENT_NAME}`);
    });
    console.log(arr1.join());
    console.log(arr2.join());

灵感来源:阿里P7:你了解路由吗?

相关文章

  • 监听数组的join方法并触发事件

    大声的告诉我当你看到[1,2,3,4].join你会想到什么。 你有木有想到join是原型链上的方法呢? 你肯定以...

  • Unity简易事件触发器

    事件触发器作为unity常用的模块解耦工具,其主要功能有三点: 订阅事件 移除事件 事件触发,并传给监听的回调方法...

  • vue3 Event 事件处理

    1、监听事件 我们可以使用指令v-on 或简写方式@来监听js事件触发。 2、事件监听方法 仅用方法名称可以返回e...

  • JavaScript HTML DOM EventListene

    监听事件 浏览器会根据某些操作触发对应事件,如果我们需要针对某种事件进行处理,则需要监听这个事件。监听事件的方法主...

  • 7-Vue事件处理

    监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。 事件处理方法...

  • vue.js 事件处理

    监听事件 可以用 v-on 指令监听 DOM 事件来触发一些 JavaScript 代码。 方法事件处理器 许多事...

  • js-数组常用函数

    在这里总结一下JS的数组方法: 1、join()Array.join()方法将数组中所有元素都转化为字符串并连接在...

  • VUE复习笔记9(事件处理)

    监听事件 可以使用 v-on 指令监听DOM事件,并在触发的时候运行一些js代码。 事件处理方法 以上是把js代码...

  • angular4 监听window滚动事件 实现页面滚动加载

    错误做法 使用render2的listen方法进行监听,之前这样做,问题是,监听事件触发后,在其他组件中触发win...

  • Spring的事件监听—ApplicationContextEv

    1. 接入流程 发布事件 事件对象: 接收类: 执行结果: 可以看到,上面事件触发监听和监听方法处于同一个线程中。...

网友评论

    本文标题:监听数组的join方法并触发事件

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