说一说js的命令模式

页面导航:首页 > 网络编程 > JavaScript > 说一说js的命令模式

说一说js的命令模式

来源: 作者: 时间:2016-01-23 10:23 【

所谓命令模式,就是解耦了命令发送者与命令接收者,何谓命令发送者,何谓命令接收者,举个例子,我点击一个按钮,一个div变红,命令发送者就是按钮,接收者就是div。当然这是简

所谓命令模式,就是解耦了命令发送者与命令接收者,何谓命令发送者,何谓命令接收者,举个例子,我点击一个按钮,一个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。

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

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<