如何在不涉及任何DOM元素的情况下实现事件驱动的JavaScript?

Dwi*_*Ash 21 javascript events dom javascript-events

有没有办法在JavaScript中实现事件驱动编程,而不涉及任何DOM元素?比如创建一个事件处理程序,每当数组被排序时执行该事件处理程序.

Dom*_*nic 39

当然!您要查找的关键字是"pubsub".以下是一些众所周知的实现:

但你也可以自己做,如下:

window.pubsub = (function () {
    var eventToListeners = {};

    return {
        sub: function (event, callback) {
            if (!eventToListeners.hasOwnProperty(event)) {
                eventToListeners[event] = [];
            }
            eventToListeners[event].push(callback);
        },
        pub: function (event, args) {
            if (eventToListeners.hasOwnProperty(event)) {
                for (var i = 0; i < eventToListeners[event].length; ++i) {
                   try {
                       eventToListeners[event][i].call(null, args);
                   } catch (e) {
                       if (console && console.error) {
                           console.error(e);
                       }
                   }
                }
            }
        }
    };
}());

// Sample usage:
pubsub.sub("arraySorted", function () {
    console.log("array was sorted");
});

var myArray = [2, 3, 1];

myArray.sort();
pubsub.pub("arraySorted");
Run Code Online (Sandbox Code Playgroud)

  • 请记住将调用包装在try-catch块中,以确保即使一个用户失败也会调用所有订阅者. (5认同)