201505092150_《Javascript模式-观察者模式》

1.  定义

Events = function() {

           var listen, log, obj, one, remove, trigger, __this;

           obj = {};

           __this = this;

           listen = function( key, eventfn ) {  //把简历扔盒子, key就是联系方式.

             var stack, _ref;  //stack是盒子

             stack = ( _ref = obj[key] ) != null ? _ref : obj[ key ] = [];

             return stack.push( eventfn );

           };

           one = function( key, eventfn ) {

             remove( key );

             return listen( key, eventfn );

           };

           remove = function( key ) {

             var _ref;

             return ( _ref = obj[key] ) != null ? _ref.length = 0 : void 0;

           };

           trigger = function() {  //面试官打电话通知面试者

             var fn, stack, _i, _len, _ref, key;

             key = Array.prototype.shift.call( arguments );

             stack = ( _ref = obj[ key ] ) != null ? _ref : obj[ key ] = [];

             for ( _i = 0, _len = stack.length; _i < _len; _i++ ) {

               fn = stack[ _i ];

               if ( fn.apply( __this,  arguments ) === false) {

                 return false;

               }

             }

             return {

                listen: listen,

                one: one,

                remove: remove,

                trigger: trigger

             }

           }

2.使用

var adultTv = Event();

adultTv .listen(  ‘‘play‘,  function( data ){

   alert ( "今天是谁的电影" + data.name );

});

//发布者

adultTv .trigger(  ‘‘play‘,  { ‘name‘: ‘麻生希‘ }  );

时间: 2024-08-07 00:12:47

201505092150_《Javascript模式-观察者模式》的相关文章

Javascript模式(一) 单例模式

function A(){ // 存储实例对象 var instance; // 重写构造函数,只返回闭包内的局部变量instance A = function(){ return instance; } // 重写原型为实例本身 之后定义在原型上的属性和方法会直接赋在该实例上 A.prototype = this; // 实例化 instance = new A(); // 重写构造函数 instance.constructor = A; // 第一次实例化时返回重写之后的构造函数的实例 re

JavaScript模式 --- 札记

全局变量的问题 创建隐式全局变量的反模式是带有var声明的链式赋值.在下面的代码片段中, a 是局部变量, b 是全局变量,这也许并不是你想要的 function foo(){ var a = b = 0; //var a window.b; // ....}//造成上面的原因是源于从右至左的操作符优先级.首先,优先级较高的是表达式 b=0, 此时b未声明.表达式的返回值为0,它被赋给 var 声明的局部变量 a. /* 建议这样做 */ function foo(){ var a, b; //

JavaScript模式

<JavaScript模式>一书看完一半了,越发感慨要精通JavaScript并非一夕一朝之事.先不说设计模式,就说JS的模块模式你真正掌握了么?这是成为一名架构师必备的基础.只是看书是很难掌握这些模式的灵活运用,需要实战,大量的实战.去什么地方实战呢,业务代码是很少有机会进行这个层面的实战的.思考了一些时日,这种实战最好的方法是研究相关的源码,underscore.js,sea.js,jQuery.js,vue.js,后两者都是近万行的代码量,先暂时不去研究,前两者是千行的代码量,可以放在今

第21章 行为型模式—观察者模式

1. 观察者模式(Observer Pattern)的定义 (1)定义:定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. (2)观察者模式的结构和说明(拉模型) ①Subject:目标对象,通常具如的功能:一个目标可以被多个观察者观察:目标提供对观察者的注册和退订的维护:当目标的状态发生变化时,目标负责通知所有注册的.有效的观察者. ②Observer:定义观察者的接口,提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以在这

javascript 模式(1)——代码复用

程序的开发离不开代码的复用,通过代码复用可以减少开发和维护成本,在谈及代码复用的时候,会首先想到继承性,但继承并不是解决代码复用的唯一方式,还有其他的复用模式比如对象组合.本节将会讲解多种继承模式以实现代码复用. 继承复用-默认模式 继承复用-apply函数 继承复用-临时构造 继承复用之默认模式: 每个javascript对象都和另一个对象 相关联,而这个对象就是原型(prototype),而原型又可以链接到其他原型行程原型链,如果当前对象不存在类似方法则会沿原型链查找,直到查找为止.继承的默

JavaScript设计模式 - 订阅发布模式(观察者模式)

var Event = (function() { var global = this, Event, _default = 'default'; Event = function() { var _create, _listen, _trigger, _remove, _shift = Array.prototype.shift, _unshift = Array.prototype.unshift, namespaceCache = {}, each = function(ary, fn)

&lt;&lt;Javascript模式&gt;&gt;中的九大设计模式

模式一:单体模式 作用:保证一个特定类仅有一个实例,常作为解决某个特定问题而存在的通用且共享(多处方法可使用,作为引用对象)的对象 javascript实现单体问题:每次new一个实例对象后,实例对象之间并不相等,两者为不同对象,非单体对象 实现: ①静态属性实例 在Universe构造函数的静态属性中缓存单个实例(this当前对象) 代码实现: function Universe(){ if(typeof Universe.instance ==="object"){ return

ruby和javascript的观察者模式

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现. 实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则.无论是观察者“观察”观察对象,还是被观察者将自己的改变“通知”观察者,都不应该直接调用. 观察者模式在ruby中的是实现 1 mo

设计模式入门-策略模式&amp;观察者模式

策略模式-strategy mod1:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起: 不同鸭子类型的飞行行为.鸣叫行为,会有不同的实现,可独立出来,和其他区分--区分变化的和不会变化的部分. mod2:针对接口编程,而不是针对实现编程: 鸭子子类使用接口表示行为,所以具体的实现不会绑死在鸭子的子类中,且可以在运行时改变行为. mod3:多用组合,少用继承: '有一个'比'是一个'更好,鸭子的具体行为可以委托给具体的行为类去处理,使用组合建立的系统有很大的弹性,不