原生js《发布订阅》功能

原生js的“eventemitter 发布订阅”其实跟vue的“bus 中央事件总线”是同一种东西,而我只是用js实现一版出来而已

组件代码:

(function () {
    var msgService = function msgService() {};
    msgService.prototype.on = function (name, callback) { // 接收
        var callbacks = this[name];
        if (callbacks) {
            callbacks.push(callback);
        } else {
            this[name] = [callback];
        }
    };
    msgService.prototype.dispatch = function (name, option) { // 广播
        let callbacks = this[name];
        callbacks && callbacks.forEach((callback) => callback(option));
    };
    window.msgService = msgService;
})()

调用代码:

var MsgService = new msgService();
MsgService.on("test1", function (data) {
     // 接收函数被触发后做点事情
  console.log("test1被调用:", data);
});
MsgService.dispatch("test1", "我是传参"); // 可重复调用多次
MsgService.dispatch("test1", "我是传参"); // 可重复调用多次
MsgService.dispatch("test1", "我是传参"); // 可重复调用多次

MsgService.on("test2", function (data) { // 接收函数被触发后做点事情 console.log("test2被调用:", data); }); MsgService.dispatch("test2", "我是传参"); // 可重复调用多次 MsgService.dispatch("test2", "我是传参"); // 可重复调用多次 MsgService.dispatch("test2", "我是传参"); // 可重复调用多次
原文地址:https://www.cnblogs.com/konghaowei/p/14036072.html