javascript设计模式
一直都在考虑这个月分享大家什么东西最好,原计划是打算写一些HTML5中JS方面的内容或者是AJAX方面的,可是自己由于表达能力,时间,还有个人工作方面的问题,这个还是等下个月再做分享吧^.^。
老规矩,开始正文以前先交代自己写这篇文章的目的和一些注意事项:
1.首先本人一直从事前端开发,所以除了JavaScript其他的语言了解不深,所以文章只会以JavaScript语言的角度去论证;
2.其实我个人在项目用过的模式也不多,对模式的概念的理解也没有那么抽象,所以最近在面试中如果面试官问到与模式相关的问题,自己感觉在对答过程中很郁闷,很多东西表达不清楚,于是就找了些相关资料,才会有这篇文章分享;
3.JavaScript模式与前端的工作和成长密不可分,因为这确实不是一个简单的话题,所以我只能尽力用简单表达和例子阐明,而且园子里有很多的高手,所以希望大家踊跃发言(由于水平有限,请大家多多指教,希望嘴下留情);
4.由于这篇文章更多的只是想起到一个介绍和讲解的作用,并不打算对每种模式进行细致的分析,所以每种模式只用到一个至二个例子,可能会造成这个例子的表达并不是最优的或者不够全面,如果各位看官觉得不过瘾,可以再去查找相关资料;
5.做任何事都需要坚持,写博客也是一样,嘿嘿,每月至少一篇(文章确实较长,希望能对朋友们有所帮助,重点部分在前言中有介绍,大家可以选择感兴趣的模式进行深入)。
6.欢迎转载,不过请注明出处,谢谢。
了解JavaScript设计模式我们需要知道的一些必要知识点:(内容相对基础,高手请跳过)
闭包:关于闭包这个月在园子里有几篇不错的分享了,在这我也从最实际的地方出发,说说我的理解。
1.闭包最常用的方式就是返回一个内联函数(何为内联函数?就是在函数内部声明的函数);
2.在JavaScript中有作用域和执行环境的问题,在函数内部的变量在函数外部是无法访问的,在函数内部却可以得到全局变量。由于种种原因,我们有时候需要得到函数内部的变量,可是用常规方法是得不到的,这时我们就可以创建一个闭包,用来在外部访问这个变量。
3.闭包的用途 主要就是上一点提到的读取函数内部变量,还有一个作用就是可以使这些变量一直保存在内存中。
4.使用闭包要注意,由于变量被保存在内存中,所以会对内存造成消耗,所以不能滥用闭包。解决方法是 在退出函数之前,将不使用的局部变量全部删除。
最后还是上一套闭包的代码吧,这样更直观。
? function f(){
1 car Calculator={2 add:function(x,y){3 return x+y;4 },5 substract:function(x,y){6 return x-y;7 },8 multiply:function(x,y){9 return x*y;10 },11 divide:function(x,y){12 return x/y;13 }14 }15 Calculator.calc =function(command){16 return Calculator[command.type](command.op1,command.opd2)17 };18 Calculator.calc({type:'add',op1:1,op2:1});19 Calculator.calc({type:'substract',op1:5,op2:2});20 Calculator.calc({type:'multiply',op1:5,op2:2});21 Calculator.calc({type:'divide',op1:8,op2:4});?
命名模式的主要用途是把调用对象(用户界面,API和代理等)与实现操作的对象隔离开,也就是说使对象间的互动方式需要更高的模块化时都可以用到这种模式。
职责链(Chain Of Responsibility)模式:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
职责链由多个不同类型的对象组成:发送者是发出请求的对象,而接收者则是接收请求并且对其进行处理或传递的对象,请求本身有时也是一个对象,它封装着与操作有关的所有数据。
典型的流程大致是:
1.发送者知道链中第一个接收者,它向这个接收者发出请求。
2.每一个接收者都对请求进行分析,然后要么处理它,要么将其往下传。
3.每一个接收者知道的其他对象只有一个,即它在链中的下家。
4.如果没有任何接收者处理请求,那么请求将从链上离开,不同的实现对此也有不同的反应,一般会抛出一个错误。
职责链模式的适用范围:1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;2.想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;3.可处理一个请求的对象集合需要被动态指定。
确实对这种模式不了解,相关资料也较少,所以代码先不上了。看看大家对这个模式有木有什么好的理解或者能较好表达这种模式的代码,谢谢了。
作者:聂微东
出处:http://www.cnblogs.com/Darren_code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
?
?