#JavaScrip

javascript设计模式——中介者模式

  程序由大大小小的单一对象组成,所有这些对象都按照某种关系和规则来通信。当程序的规模增大,对象会越来越多,它们之间的关系也越来越复杂,难免会形成网状的交叉引用。当改变或删除其中一个对象的时候,很可能需要通知所有引用到它的对象。面向对象设计鼓励将行为分布到各个对象中,把对象划分成更小的粒度,有助于增强对象的可复用性,但...

javascript设计模式——职责链模式

  职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,把这些对象称为链中的节点。本...

javascript设计模式——享元模式

  享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在javascript中,浏览器特别是移动端的浏览器分配的内存...

javascript设计模式——模板方法模式

  在javascript开发中用到继承的场景其实并不是很多,很多时候喜欢用mix-in的方式给对象扩展属性。但这不代表继承在javascript里没有用武之地,虽然没有真正的类和继承机制,但可以通过原型prototype来变相地实现继承。本文将详细介绍一种基于继承的设计模式——模板方法(Tem...

javascript设计模式——组合模式

  在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想。组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的。本文将详细介绍组合模式 宏命令  宏命令对象包含了一组具体的子命令对象,不管是宏命令对象,还是子命令对...

javascript设计模式——命令模式

  假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜。餐厅还可以满足客人需要的定时服务,比如客人可能当前正在回家的路上,要求1个小时后才开始炒他的菜,只要订单还在,厨师就不会忘记。客人也可...

javascript设计模式——发布订阅模式

  发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在javascript开发中,一般用事件模型来替代传统的发布—订阅模式。本文将详细介绍发布订阅模式 现实事例  不论是在程序世界里还是现实生活中,发布&mdas...

javascript设计模式——迭代器模式

  迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。迭代器模式是一种相对简单的模式,简单到很多时候都不认为它是一种设计模式。本文将详细介绍迭代器模式...

javascript设计模式——代理模式

  代理模式是为一个对象提供一个占位符,以便控制对它的访问。代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。代理模式的关键是当客户不方便直接访问一个对象或者不...

javascript设计模式——策略模式

  在程序设计中,常常遇到类似的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。这些算法灵活多样,而且可以随意互相替换。这种解决方案就是本文将要介绍的策略模式。策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换 奖金计算 ...

javascript设计模式——单例模式

  单例模式是指保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式,有一些对象往往只需要一个,比如线程池、全局缓存、浏览器中的window对象等。在javaScript开发中,单例模式的用途同样非常广泛。试想一下,单击登录按钮时,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少...

深入理解javascript函数进阶系列第四篇——惰性函数

  惰性函数表示函数执行的分支只会在函数第一次调用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。本文将详细介绍惰性函数 使用背景  因为各浏览器之间的行为的差异,经常会在函数中包含了大量的if语句,以检查浏览器特性,解决不同浏览器...

深入理解javascript函数进阶系列第三篇——函数节流和函数防抖

  javascript中的函数大多数情况下都是由用户主动调用触发的,除非是函数本身的实现不合理,否则一般不会遇到跟性能相关的问题。但在一些少数情况下,函数的触发不是由用户直接控制的。在这些场景下,函数有可能被非常频繁地调用,而造成大的性能问题。解决性能问题的处理办法就是函数节流和函数防抖。本文将详细介绍函数节流和函数...

深入理解javascript函数进阶系列第二篇——函数柯里化

  函数柯里化currying的概念最早由俄国数学家MosesSchönfinkel发明,而后由著名的数理逻辑学家HaskellCurry将其丰富和发展,currying由此得名。本文将详细介绍函数柯里化(curring) 定义  currying又称部分求值。一个currying的函数首先会接受一...

深入理解javascript函数进阶系列第一篇——高阶函数

  前面的函数系列中介绍了函数的基础用法。从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义  高阶函数(higher-orderfunction)指操作函数的函数,一般地,有以下两种情况  1、函数可以作为参数被传递  2、函数可以作为返回值输出  javascript中的函数...
首页上一页...6768697071...下一页尾页