有没有办法在不涉及任何DOM元素的情况下用JavaScript实现事件驱动的编程?例如,创建一个事件处理程序,该事件处理程序在每次对数组进行排序时执行。

最佳答案

当然!您要查找的关键字是“pubsub”。以下是一些著名的实现:

  • As a jQuery plugin
  • PubSubJS
  • EventEmitter2
  • Backbone.Events

  • 但是您也可以自己做,就像这样:
    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");
    

    09-25 16:08