码迷,mamicode.com
首页 > Web开发 > 详细

说一说js的命令模式

时间:2015-06-01 09:47:32      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:命令模式

所谓命令模式,就是解耦了命令发送者与命令接收者,何谓命令发送者,何谓命令接收者,举个例子,我点击一个按钮,一个div变红,命令发送者就是按钮,接收者就是div。当然这是简单的例子,为什么要解耦,好处就是解耦了各个对象的联系。

比如现在有个对象,对象看起来是这样写的:

var people={
	name:"liyong",
	sayName:function(){
		alert(this.name);
	}
}

那我们如何在一个按钮上绑定事件,点击按钮后调用sayName方法,并且要弹出liyong,之前也写过的,利用bind,可以这么做:

button.addEventListener("click",people.sayName.bind(people),false);
这样写明显把button和people两个对象耦合在一起了,那如果我现在点击一个按钮,要弹出两个人的名字呢,那我们必须得这样做了:

var People=function(name){
	this.name=name;
}
People.prototype.sayName=function(){
	alert(this.name);
}
var createCommand=function(){
	var args=Array.prototype.slice.call(arguments,0);
	return {
		sayName:function(){
			for(var i=0,people;people=args[i++];){
				people.sayName();
			}
		}
	}
}
var people1=new People("liyong1");
	people2=new People("liyong2");
	command=createCommand(people1,people2),
	button=document.getElementById("div1")
button.addEventListener("click",command.sayName,false);

我们不用创建了一个命令函数,而解耦了命令接收者与命令发送者之间的耦合关系,我们调用的时候只需要执行函数就行了,而不需要知道这个函数由哪个对象来具体负责执行,这是非常好的。我们可以把这些命令缓存起来,需要的时候执行就行了。就像在linux中我们敲命令的时候:

比如要创建一个文件夹,我们用:mkdir

要打开一个文本文件,我们用:vi

那我们可以用一个bat文件把这些执行命令存起来,想执行的时候直接执行就行了,不用管这些命令具体是由谁执行的,我们只需要发送命令就行了。

其实在js中,所谓命令模式,只是把这些执行过程封装在一个函数中,调用的时候可以用people.sayName()的方式,这样就能让sayName方法找到自己的this。

好了,今天就讲到这里吧!


说一说js的命令模式

标签:命令模式

原文地址:http://blog.csdn.net/u010716758/article/details/46293241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!