一段javascript设计模式应用场景

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=">
<title>test </title>
</head>
<body>
<script>
(function(window){

		function comets(url){
				if (!url || typeof url != ‘string‘)
				{
					return;
				}

				var Client = function(url) {
					var self = this;
					this.events = [];
					this.onmessage = function(e){
					console.log(‘此时如果Client.onmessage 被执行 Client.events属性中就是 function(data){ for (var i  = 0; i < fs.length; i++) {‘+
							   ‘fs[i](data.parseJSON(), data);}  } 这里fs会去找‘);
						var es = this.events;
						for (var i = 0; i < es.length; i++)
						{
							es[i](11111, ‘hello world‘);  //es[i] 相当于A函数
						}
					}

				//绑定推送事件
					this.bind = function(handle) {
						if (typeof handle != ‘function‘)
						{
							return this;
						}

						this.events.push(handle);
						console.log(‘--------client对象中的bind()方法将 传过来的参数 追加到 Client.events属性‘);
						return this;
					}

					setInterval(function() { self.onmessage();}, 2000);
				}

				return new Client(url);
		}

	 var _ = {};
	 /*推送模块*/
	 _.comet = {
		_funcs : [],  //不断往此数组追加函数
		init : function(){
			var fs = this._funcs;
			 console.log(‘_.comet.init() 函数被执行  comets函数被执行,并实例化它内部的client对象返回  client对象中的bind()方法被执行‘);
			var url =‘bixin.beta.golds-cloud.com?channel_id=r1000‘;
			comets(url).bind(function(a, b){
				   for (var i  = 0; i < fs.length; i++)
				   {
					   fs[i](a, b); 	//执行_funcs中的元素(追加的函数)
				   }
			   });
		},
		bind : function(func){
			if (typeof func != ‘function‘)
			{
				return false;
			}
			this._funcs.push(func);	//不断的将方法 追加进_funcs数组中
			 console.log(‘_.comet.bind()函数已经将传过来的 函数 作为参数追加到了_.comet._funcs数组中‘);
		}
	 }

	_.chat = {
	    time: new Date(),
		init:function(){
		     console.log(‘_.chat.init()函数已经被执行‘);
		        _.comet.bind(function(j, d){  console.log(j +"  -第一种方式打印-  "+ d);});  	

               _.comet.bind(function(j, d){  console.log(j +"  -第二种方式打印-  "+ d);});		

               _.comet.bind(function(j, d){  console.log(j +"  -第二种方式打印-  "+ d);});
	    }
	};

	 _.init = function() {
	        _.comet.init();
	        _.chat.init();
	 };
	 window.HD = _;
  })(window);

  //执行
  HD.init();
</script>
</body>
</html>
时间: 2024-11-06 09:35:29

一段javascript设计模式应用场景的相关文章

javascript设计模式

javascript设计模式 阅读目录 什么是设计模式 单体模式: 工厂模式: 单例模式 观察者模式(发布订阅模式) 策略模式 模板模式 代理模式 外观模式 设计模式太多了,貌似有23种,其实我们在平时的工作中没有必要特意去用什么样的设计模式,或者你在不经意间就已经用了设计模式当中的一种.本文旨在总结平时相对来说用的比较多的设计模式. 回到顶部 什么是设计模式 百度百科: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是

常用的Javascript设计模式-韩烨

<Practical Common Lisp>的作者 Peter Seibel 曾说,如果你需要一种模式,那一定是哪里出了问题.他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案. 不管是弱类型或强类型,静态或动态语言,命令式或说明式语言.每种语言都有天生的优缺点.一个牙买加运动员, 在短跑甚至拳击方面有一些优势,在练瑜伽上就欠缺一些. 术士和暗影牧师很容易成为一个出色的辅助,而一个背着梅肯满地图飞的敌法就会略显尴尬. 换到程序中, 静态语言里可能需要花很多功夫来实现装饰

Javascript设计模式理论与实战:工厂方法模式

本文从简单工厂模式的缺点说起,引入工厂方法模式,介绍的工厂方法模式的基本知识,实现要点和应用场景,最后举例进行说明工厂方法模式的应用.在之前的<Javascript设计模式理论与实战:简单工厂模式>这篇文章中,我们介绍了简单工厂的知识和一些应用.简单工厂模式存在一个唯一的工厂类,它的优点是所有产品类的实例化集中管理,便于理解,但这既是优点也是缺点.如果产品类的数量较少并且不会经常发生变化,我们可以直接利用简单工厂模式,但是有的时候,需求是随时在变的,产品类也可能随时在增加,如果使用简单工厂模式

javascript设计模式详解之命令模式

每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某些设计模式不自觉的我们都在使用.只不过没有对应起来罢了.本文就力求以精简的语言去介绍下设计模式这个高大上的概念.相信会在看完某个设计模式之后有原来如此的感慨. 一.基本概念与使用场景: 基本概念: 将请求封装成对象,分离命令接受者和发起者之间的耦合. 命令执行之前在执行对象中传入接受者.主要目的相互

因一段JavaScript代码引发的闲扯

前两天,一朋友给我发了一段JavaScript代码: function f1(){ var n=999; nAdd=function(){ n+=1 }; function f2(){ alert(n); } return f2; } var result1=f1(); var result2=f1(); result1(); // 999 result2();//999 nAdd(); result1(); // 是999而不是1000,这是为何呢? result2();//1000 问题的原

JavaScript 设计模式与开发实践读书笔记 http://www.open-open.com/lib/view/open1469154727495.html

JavaScript 设计模式与开发实践读书笔记 最近利用碎片时间在 Kindle 上面阅读<JavaScript 设计模式与开发实践读书>这本书,刚开始阅读前两章内容,和大家分享下我觉得可以在项目中用的上的一些笔记. 我的 github 项目会不定时更新,有需要的同学可以移步到我的 github 中去查看源码: https://github.com/lichenbuliren/design-mode-notes 1.currying 函数柯里化 currying 又称 部分求值 .一个 cu

理解《JavaScript设计模式与开发应用》发布-订阅模式的最终版代码

最近拜读了曾探所著的<JavaScript设计模式与开发应用>一书,在读到发布-订阅模式一章时,作者不仅给出了基本模式的通用版本的发布-订阅模式的代码,最后还做出了扩展,给该模式增加了离线空间功能和命名空间功能,以达到先发布再订阅的功能和防止名称冲突的效果.但是令人感到遗憾的是最终代码并没有给出足够的注释.这让像我一样的小白就感到非常的困惑,于是我将这份最终代码仔细研究了一下,并给出了自己的一些理解,鉴于能力有限,文中观点可能并不完全正确,望看到的大大们不吝赐教,谢谢! 下面是添加了个人注释的

Javascript设计模式学习一

学习Javascript设计模式之前,需要先了解一些相关知识,面向对象的基础知识.this等重要概念,以及掌握一些函数式编程的技巧. Js多态 多态的思想:实际上是把“做什么”和“谁去做”分离开来.例: var makeSound = function(animal){ if(animal.show instanceof Function){ animal.show(); } } var dog = { show: function(){ console.log('汪汪'); } } var c

精读《JavaScript设计模式》:简介(一)

经过一段工作时间的沉淀后,我发现需要细看一些书籍验证当中获得的经验.在JavaScript上的结构和模式上的考虑,使我决定精读<JavaScript设计模式>(中文版).在阅读的过程中,发现中文版的某些译文有些不适当的时候,我就会查询相应英文版<Learning JavaScript Design Patterns>,斟酌差异.我摘拿了一些内容记录,在下面描述中,中文上有异议地方,我会附带上英文部分,并记录自己想法. 模式目的: 中文: 编写易于维护的代码,其中一个最重要方面是能够