<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>17-观察者模式</title>
</head>
<body>
<input value="btn" id="ipt" type="button">
<script type="text/javascript">
//创建观察者
var Observer = (function(){
var __messages = {};
return {
//注册信息接口
regist : function(type, fn){
//如果此消息不存在则创建一个该消息类型
if(typeof __messages[type] === 'undefined'){
//将动作推入到该消息对应的动作执行队列中
__messages[type] = [fn];//--> fn转为数组
//console.info(__messages);
//如果此消息存在
}else{
//将动作推入到该消息对应的动作执行队列中
__messages[type].push(fn);
//console.info(__messages);
}
}
//发布信息接口
,fire : function(type, args){
//如果该消息没有被注册,则返回
if(!__messages[type]){
return;
}
//定义消息信息
var events = {
type : type, //消息类型
args : args || {} //消息携带数据
},
i = 0, //消息动作循环变量
len = __messages[type].length; //消息动作长度
//遍历消息动作
for(; i < len; i++){
//依次执行注册的消息对应的动作序列
__messages[type][i].call(this, events);
}
}
//移除信息接口
,remove : function(type, fn){
//如果消息动作队列存在
if(__messages[type] instanceof Array){
//从最后一个消息动作遍历
var i = __messages[type].length - 1;
for(; i >= 0; i--){
//如果存在该动作则在消息动作序列中移除相应动作
__messages[type][i] === fn && __messages[type].splice(i, 1);
}
}
}
}
})();
//console.info(Observer);
/*Observer.regist('test',function(e1){
console.info(e1.__proto__);
console.info(e1.type,e1.args.msg);
});
Observer.fire('test',{msg:'传递参数'});*/
(function(){
var h = 555;
function aa(e){
console.info(e);
console.info("a的代码",e.args.text);
console.info("a的代码",e.args.num); }
Observer.regist('addCM',aa);
})();
(function(){
function bb(e){
console.info('b的代码',e.args.text);
console.info('b的代码',e.args.num);
}
Observer.regist('addCM',bb);
//.regist('removeCM',bb);
})();
(function(){
var ipt = document.getElementById('ipt');
ipt.onclick = function(){
//Observer.fire('removeCM'{num:-1});
console.info(123);
Observer.fire('addCM',{text:"我是text内容",num:3});
}
/*function cc(){
console.info('c的代码');
}*/ })(); </script> </body>
</html>

17-js观察者模式的更多相关文章

  1. js - 观察者模式与订阅发布模式

    零.序言 转载&参考: 1.JavaScript 设计模式系列 - 观察者模式 2.JavaScript 设计模式(六):观察者模式与发布订阅模式 一.观察者模式(observer) 概要: ...

  2. JavaScript基础17——js的Date对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. js观察者模式

    观察者模式存在观察者和被观察者 被观察者的状态发生改变,通知观察者调用观察者的update方法,观察者的update方法对被观察者的状态进行检测,做出相应的操作 被观察者存在接口attach,deta ...

  4. 浅谈js观察者模式

    观察者模式又叫发布订阅模式,它可以让多个观察者对象同时监听某一个主题对象,即在一个事件发生时,不同的对象迅速对其进行相应.就比如当又人闯红灯,不同的人对这件事迅速发起响应,当然这个比喻不太恰当,不过在 ...

  5. js观察者模式与Model

    目的 观察者模式是常见的设计模式,可以被应用到MV*框架的Model上,来实现对数据变化的监听. 基本概念 观察者模式是一种常见的设计模式.被观察者可以被订阅(subscribe),并在状态发生改变时 ...

  6. js观察者模式学习

    function Events(){ var obj = {}; this.on=function(key,fn){ var stack; stack = obj[key] || (obj[key] ...

  7. 2016.02.17 JS DOM编程艺术 第四五六章

    看完这三章内容,集中精力,加快速度.

  8. JS 观察者模式

    Events = function() { var listen, log, obj, one, remove, trigger, __this; obj = {}; __this = this; l ...

  9. js自己总结的小东西(打印出来方便学习)

    1.你对angular有哪些认识? 属于mvvm框架,现在非常的火,由谷歌开发出来并维护的框架,为了解决负责业务中ajax的开发痛苦,刚开始结果angular的时候,确实让我有一种耳目一些,原来代码还 ...

  10. 100多个基础常用JS函数和语法集合大全

    网站特效离不开脚本,javascript是最常用的脚本语言,我们归纳一下常用的基础函数和语法: 1.输出语句:document.write(""); 2.JS中的注释为//3.传统 ...

随机推荐

  1. ElasticSearch 集群环境搭建,安装ElasticSearch-head插件,安装错误解决

    ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决 说起来甚是惭愧,博主在写这篇文章的时候,还没有系统性的学习一下ES,只知道可以拿来做全文 ...

  2. linux下安装python3.6.6

    1.到python的官网去下载python3.6.3安装包,必须是Linux版本的 2.在/usr/tmp下下载python安装包 wget https://www.python.org/ftp/py ...

  3. mutex,thread(c++11 windows linux三种方式)

    一 c++11  windows linux三种方式 //#include <stdio.h> //#include <stdlib.h> //#include <uni ...

  4. springboot读取外部配置文件

    springboot项目打成jar包后不好进行配置文件修改,可设置为读取外部配置文件,方便进行配置修改. 步骤: 1.将jar包中的application.properties配置文件复制到自定义路径 ...

  5. 享学课堂java架构vip课程

    1.wps文档地址 https://docs.qq.com/doc/DRVNLUndvTmFSdEhO 2.百度网盘地址 https://pan.baidu.com/s/1uxaTzJZHKrsw_H ...

  6. ssh刚连接到其他服务器就闪退的问题。Connection to slave1 closed

    问题现象: 由于最近在docker上部署hadoop,最开始搭建完以后,ssh是正常的,当我重启系统以后就出现了上面的这个问题 解决: 修改配置文件:/etc/ssh/sshd_config 把Per ...

  7. Tkinter 之pack布局

    一参数说明 参数 作用 anchor 控制组件在 pack 分配的空间中的位置"n", "ne", "e", "se", ...

  8. sql server 发布订阅

    [配置] 一. 发布方 复制 >> 如果有问题 C:\Windows\System32\drivers\etc hosts: 127.0.0.1 ?? 二. 订阅方 订阅方设置结束 三. ...

  9. 微信小程序 wxParse插件显示视频

    修改wxParse/html2json.js 文件 ,在 html2json(html, bindName) 方法里 var node = { node: 'element', tag: tag, } ...

  10. 阿里云服务器发送邮件:Connection could not be established with host smtp.qq.com [Connection timed out #110]

    阿里云服务器发送邮件:Connection could not be established with host smtp.qq.com [Connection timed out #110] 一.总 ...