有时在JS中需要定义特定的事件,这些事件可以传递自定义参数。此时可以采用发布/订阅模式。
发布/订阅模式简单实现如下:
<script type="text/javascript"> var pubsub = {}; (function($) { $.topics = {}; // 发布或广播事件 $.publish = function (topic, args) { if (!$.topics[topic]) return false; if ($.topics[topic] instanceof Array) { var topics = $.topics[topic]; for(var i = 0; i < topics.length; i++) topics[i](args); } return this; }; // 通过特定名称和回调函数订阅事件 $.subscribe = function (topic, func) { if (!$.topics[topic]) $.topics[topic] = []; // 对应topic下加入回调函数 $.topics[topic].push(func); return this; }; // 解绑取消订阅事件 $.unsubscribe = function (topic) { if (!$.topics[topic]) return false; delete($.topics[topic]); return this; } })(pubsub); // 注册confirm事件 pubsub.subscribe("confirm", function() { alert("this is the confirm"); }); // 注册alert事件 并订阅该事件后取消该订阅 pubsub.subscribe("alert", function(data) { alert("this is the alert " + data); }).publish("alert", "success").unsubscribe("alert"); </script>