<!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. 发布一个npm package

    1. 创建一个package.json文件 发布到npm registry的包必须包含一个packge.json文件. 1. 必需name字段 要求: 1. 只能是一个单词,但是可以包含-或_ 2. ...

  2. 查找 Linux 发行版名称、版本和内核详细信息

    作者: Sk 译者: LCTT geekpi | 2019-08-26 11:40   收藏: 1 本指南介绍了如何查找 Linux 发行版名称.版本和内核详细信息.如果你的 Linux 系统有 GU ...

  3. 点分 TREE

    /* 1468: Tree Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 774  Solved: 412[Submit][Status][Discus ...

  4. Readiness probe failed:connection refused

    我的K8S集群在启动一个POD的时候说死起不来,然后就报下面的错误 Events: Type Reason Age From Message ---- ------ ---- ---- ------- ...

  5. jmeter接口上传图片功能

    图片上传需要选择Files Upload 输入下列参数: File Path:方法一,把图片放在bin目录下,直接输入图片名称:方法二,点击下图“Browse”按钮,选择一张需要上传的图片,地址将会自 ...

  6. python3编程基础之一:标识符

    每种编程语言都是需要处理数据的,需要变量.函数.类等,而这些都是通过名称访问的.因此,能够作为变量.函数.类等名称的字符串就是标识符.数据,是计算机进行运算的实体.标识符,用来标记的符号,它会指向一个 ...

  7. codeforces319C

    C. Kalila and Dimna in the Logging Industry time limit per test 2 seconds memory limit per test 256 ...

  8. idea备忘

    1.idea 最近打开的文件个数 File->Settings->Editor->General->Editor Tabs->Tab Closing Policy-> ...

  9. Linux虚拟化与容器化

    随着云计算的不断发展,计算资源不断集中于大规模的服务器集群上.为了充分发挥硬件潜力,提高服务器性能,虚拟化技术由此诞生. 所谓虚拟化技术,是指将计算元件和硬件隔离开来,隐藏底层的硬件物理特性,为用户提 ...

  10. 移动端安卓和 IOS 开发框架 Framework7 布局

    对应的各种效果,Framework7 里面实现的方式比较多,这里我就只写我用的一种,样式有的自己修改了的,想看官方详细的参见 http://framework7.cn 一.手风琴布局Accordion ...