js观察者模式
来源:互联网 发布:js传值到html 编辑:程序博客网 时间:2024/06/05 14:27
//由于这些成员对于任何发布者对象都是通用的,故将它们作为独立对象的一个部分来实现是很有意义的。那样我们可将其复制到任何对象中,并将任意给定对象变成一个发布者。var pubsub = {};(function (q) { var topics = {}; // 回调函数存放的数组 var subUid = -1; /** * 发布方法 * topic订阅id * args参数 * return 成功返回true, 失败返回false */ q.publish = function (topic, args) { if (!topics[topic]) { return false; } setTimeout(function () { var subscribers = topics[topic], len = subscribers ? subscribers.length : 0; while (len--) { subscribers[len].func(topic, args); } }, 0); return true; }; /** * 订阅方法 * topic订阅id * func调用函数 * return 返回订阅id */ q.subscribe = function (topic, func) { if (!topics[topic]) { topics[topic] = []; } //var token = (++subUid).toString(); topics[topic].push({ token: topic, func: func }); return topic; }; /** * 订阅方法Confirm(该方法专为confirm定制, 不可修改) * parameter参数对象 * func调用函数 * return 返回订阅id */ q.subscribeConfirm = function (parameter, func) { oDragConfim(parameter);//弹出自定义confirm框 var topic = parameter.topic;//"confirm"; pubsub.unsubscribe(topic);////先删除以前的订阅 if (!topics[topic]) { topics[topic] = []; } //var token = (++subUid).toString(); topics[topic].push({ token: topic, func: func }); return topic; }; /** * 退订方法 * token 根据token删除 * return 成功返回token, 失败返回false */ q.unsubscribe = function (token) { for (var m in topics) { if (topics[m]) { for (var i = 0, j = topics[m].length; i < j; i++) { if ( topics[m][i].token === token) { topics[m].splice(i, 1); return token; } } } } return false; };} (pubsub));/*//(undefined!=fun2) ?pubsub.unsubscribe(fun2):"";//("undefined" != typeof fun2)?pubsub.unsubscribe(fun2):"";//来,订阅一个var token0 = pubsub.subscribe('example1', fun1 = function (topics, data) { console.log(topics + ": " + data);});//alert(token0);//来,再订阅一个var token1 = pubsub.subscribe('example', fun2 = function (topics, data) { console.log(topics + "******* " + data);});pubsub.subscribeConfirm('confirm', funConfirm = function (topics, data) { console.log(topics + "******* " + data);}); //alert(token1);//pubsub.unsubscribe(fun2)//发布通知pubsub.publish('example1', 'hello world!');pubsub.publish('example1', ['test', 'a', 'b', 'c']);pubsub.publish('example', [{ 'color': 'blue' }, { 'text': 'hello'}]);//pubsub.publish('confirm', 'true');*/
阅读全文
0 0
- JS实现观察者模式
- js观察者模式
- js观察者模式
- js观察者模式
- js观察者模式2
- js实现观察者模式
- js观察者模式
- js实现观察者模式
- JS观察者模式
- js观察者模式
- js观察者模式
- 【JS】观察者模式
- js观察者模式
- js设计模式-观察者模式
- js设计模式-----观察者模式
- JS设计模式-观察者模式
- js观察者模式简单实现
- js 设计模式学习--观察者模式
- JavaScript面向对象-原型
- 踩坑-Integer类型的整数比较大小
- Android 动态添加布局match_parent无效
- MySQL基础操作之单表的增删改
- linux oracle用户解锁
- js观察者模式
- HelloJava
- android中Lambda表达式写法
- eclipse 打开.properties文件显示中文设置
- priority_queue 优先级队列的用法
- oracle 常用函数
- 梯度下降法
- POJ 1836.Alignment
- 并发处理随想-多进程与多线程