美文网首页Web 前端开发 技术干货
纯JS实现事件发布订阅模式

纯JS实现事件发布订阅模式

作者: 壹个正经人 | 来源:发表于2017-05-04 14:27 被阅读0次

    // 发布订阅对象

    var PubSub = {};

    // 事件存储对象

    var Events = {};

    // 订阅事件

    PubSub.subscribe = function(eventName, eventFunc){

    var currentEvents = Events[eventName];

    !currentEvents && (function(){

    Events[eventName] = [];

    })();

    Events[eventName].push(eventFunc);

    }

    // 发布事件

    PubSub.publish = function(eventName){

    var eventFuncs = Events[eventName];

    eventFuncs && (function(){

    eventFuncs.forEach(function(func){

    func();

    })

    })();

    }

    // 取消订阅

    PubSub.cancelSub = function(eventName, eventFunc){

    var currentEvents = Events[eventName];

    currentEvents && (function(){

    for (var i = 0; i < currentEvents.length; i++) {

    if (currentEvents[i] === eventFunc) {

    currentEvents.splice(i, 1);

    }

    }

    })();

    }

    // 测试使用

    var test = function(){

    var eventFunc_A = function(){

    console.log("发布了事件A");

    }

    var eventFunc_B = function(){

    console.log("发布了事件B");

    }

    // 订阅A事件

    PubSub.subscribe("eventFunc_A", eventFunc_A);

    // 订阅B事件

    PubSub.subscribe("eventFunc_B", eventFunc_B);

    // 取消B事件订阅

    PubSub.cancelSub("eventFunc_B", eventFunc_B);

    // 发布A事件

    PubSub.publish("eventFunc_A");

    // 发布B事件

    PubSub.publish("eventFunc_B");

    }

    test();

    相关文章

      网友评论

        本文标题:纯JS实现事件发布订阅模式

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