js观察者模式
观察者模式存在观察者和被观察者
被观察者的状态发生改变,通知观察者调用观察者的update方法,观察者的update方法对被观察者的状态进行检测,做出相应的操作
被观察者存在接口attach,detach,notify
观察者模式作用:将操作转化为通知
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>观察者模式</title>
<style type="text/css">
div{
border:1px solid green;
color:gray;
}
</style> </head>
<body>
<select name="guancha">
<option value="jingdian">经典模式</option>
<option value="huali">华丽模式</option>
</select>
<div id="content">
现在是默认内容.
</div>
<input id="btn1" type="button" value="别监控默认区域了">
<input id="btn2" type="button" value="继续默认区域了">
<script type="text/javascript">
//被观察者:select
//观察者:content
var osel=document.getElementsByTagName("select")[0];
var ocon=document.getElementById("content");
//将所有的观察者都注册在被观察者身上
osel.observers={};
//注册方法
osel.attach=function(key,observer){
this.observers[key]=observer;
}
//注销方法
osel.detach=function (key){
delete this.observers[key];
}
//通知所有观察者,调用他们的update方法//在select改变时通知所有被观察者
osel.onchange=osel.notify=function(){
for(var key in this.observers){
this.observers[key].update(this);
}
}
//定义ocon的update方法
ocon.update=function(observer){
if(observer.value=="jingdian"){
this.style.background="#FF9E4A";
}else if(observer.value=="huali"){
this.style.background="red";
}
}
//向被观察者当中注册
osel.attach("ocon",ocon); var obtn1=document.getElementById("btn1");
var obtn2=document.getElementById("btn2");
obtn1.onclick=function(){
osel.detach("ocon");
}
obtn2.onclick=function(){
osel.attach("ocon",ocon);
}
</script>
</body>
</html>
js观察者模式的更多相关文章
- js - 观察者模式与订阅发布模式
零.序言 转载&参考: 1.JavaScript 设计模式系列 - 观察者模式 2.JavaScript 设计模式(六):观察者模式与发布订阅模式 一.观察者模式(observer) 概要: ...
- 浅谈js观察者模式
观察者模式又叫发布订阅模式,它可以让多个观察者对象同时监听某一个主题对象,即在一个事件发生时,不同的对象迅速对其进行相应.就比如当又人闯红灯,不同的人对这件事迅速发起响应,当然这个比喻不太恰当,不过在 ...
- js观察者模式与Model
目的 观察者模式是常见的设计模式,可以被应用到MV*框架的Model上,来实现对数据变化的监听. 基本概念 观察者模式是一种常见的设计模式.被观察者可以被订阅(subscribe),并在状态发生改变时 ...
- js观察者模式学习
function Events(){ var obj = {}; this.on=function(key,fn){ var stack; stack = obj[key] || (obj[key] ...
- JS 观察者模式
Events = function() { var listen, log, obj, one, remove, trigger, __this; obj = {}; __this = this; l ...
- 收藏的js学习小例子
1.js模拟java里的Map function Map(){ var obj = {} ; this.put = function(key , value){ obj[key] = value ; ...
- 微信小程序开发中的二三事之网易云信IMSDK DEMO
本文由作者邹永胜授权网易云社区发布. 简介 为了更好的展示我们即时通讯SDK强悍的能力,网易云信IM SDK微信小程序DEMO的开发就提上了日程.用产品的话说就是: 云信 IM 小程序 SDK 的能力 ...
- 谈谈JS的观察者模式(自定义事件)
呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...
- PureMVC(JS版)源码解析(一):观察者模式解析
假设一种情景,在程序开发中,我们需要在某些数据变化时,其他的类做出相应,例如在游戏中,升级一件装备,会触发玩家金币数量改变,背包数据改变和冷却队列数据改变等等.我们不可能设置setInte ...
随机推荐
- ListView自定义适配器--10.17
1. 添加button 2. ViewHolder 优化性能 就是一个持有者的类,他里面一般没有方法,只有属性,作用就是一个临时的储存器,把你getView方法中每次返回的View存起来,可以下次再用 ...
- hdoj 1872 稳定排序
稳定排序 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- nyoj 79 拦截导弹
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- [OC Foundation框架 - 11] NSMutableDictionary
void dicUse() { NSMutableDictionary *dic = [NSMutableDictionary dictionary]; Student *stu1 = [Stud ...
- Swift对面向对象提供了良好的支持,下面介绍几个其独有的特性。
Swift对面向对象提供了良好的支持,下面介绍几个其独有的特性. 懒加载属性 Swift在语言层面上提供了类中懒加载属性的支持,使用lazy作为关键字: class Renderer { lazy v ...
- 背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)
以背景黑色,透明度0.5举例为大家详细介绍下关于背景透明,文字不透明的最佳方法同时兼容IE,具体实现如下,感兴趣的朋友可以参考下哈希望对大家有所帮助 以背景黑色,透明度0.5举例 非IE:backgr ...
- js主要知识轮廓笔记
一.js中的基础类型和引用类型: 基础类型:1.Number2.String3.Boolean4.Undefined5.Null 引用类型(内置对象):1.Object类型2.Array类型3.Dat ...
- 高性能javascript
高性能javascript开发 标签(空格分隔): javascript DOM访问与修改 访问DOM元素是具有代价的,修改元素代价较为昂贵,会导致浏览器重新计算页面的几何变化. 尽量减少DOM访问, ...
- 知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题
我们知道在为sqlserver建立功能数据库时,通过会为库再建立一个登陆名,而这个登陆名时,只用来管理这个数据库,这是安全的,正确的.
- 【09】绝不在构造和析构过程中调用virtual方法
1.绝不在构造和析构过程中调用virtual方法,为啥? 原因很简单,对于前者,这种情况下,子类专有成分还没有构造,对于后者,子类专有成分已经销毁,因此调用的并不是子类重写的方法,这不是程序员所期望的 ...