随笔分类 -  Javascript

JavaScript设计模式与开发实践 状态模式
摘要:状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。 一、电灯程序 1.1 不用状态模式的电灯程序实现 我们来考虑一下上述程序的缺点: 很明显buttonWasPressed 方法是违反开放-封闭原则的,每次新增或者修改light 的状态,都需要改动buttonWasPr 阅读全文

posted @ 2016-12-09 12:13 Surahe 阅读(238) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 装饰者模式
摘要:在程序开发中,许多时候都并不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰者模式。装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象。 装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添加职责。 一、模拟传统面向对象语言的装饰 阅读全文

posted @ 2016-12-07 16:17 Surahe 阅读(380) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 中介者模式
摘要:中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介者对象即可。中介者使各对象之间耦合松散,而且可以独立地改变它们之间的交互。中介者模式使网状的多对多关系变成了相对简单的一对多关系。 阅读全文

posted @ 2016-12-06 16:35 Surahe 阅读(206) 评论(0) 推荐(0) 编辑

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

posted @ 2016-11-23 11:46 Surahe 阅读(262) 评论(0) 推荐(0) 编辑

图解gulp工作流
摘要: 阅读全文

posted @ 2016-11-22 18:53 Surahe 阅读(150) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 组合模式
摘要:组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的。 一、组合模式的用途 组合模式将对象组合成树形结构,以表示“部分.整体”的层次结构。 除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性,具体 阅读全文

posted @ 2016-11-18 11:35 Surahe 阅读(349) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 命令模式
摘要:命令模式是最简单和优雅的模式之一,命令模式中的命令(command)指的是一个执行某些特定事情的指令。 命令模式最常见的应用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间 阅读全文

posted @ 2016-11-16 17:00 Surahe 阅读(219) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 发布—订阅模式
摘要:发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在 JavaScript 开发中,我们一般用事件模型来替代传统的发布—订阅模式。 一、发布-订阅模式的作用 发布—订阅模式可以广泛应用于异步编程中,这是一种替代传递回调函数的 阅读全文

posted @ 2016-11-15 16:19 Surahe 阅读(1293) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 代理模式
摘要:代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。 一、保护代理和虚拟代理 保护代理:代理 阅读全文

posted @ 2016-11-14 15:26 Surahe 阅读(342) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 策略模式
摘要:定义 定义一系列算法,把它们封装起来,并使它们可以相互替换。具体来说就是,定义一系列算法,把它们各自封装成策略类,算法被封装在策略类内部的方法。在客户对Context发起请求的时,Context总是把请求委托给策略对象中的某个方法计算。 Javascript的策略模式 使用策略模式实现缓动动画 编写 阅读全文

posted @ 2016-11-11 10:29 Surahe 阅读(160) 评论(0) 推荐(0) 编辑

跨域知识总结
摘要:一、概述 1.1 什么是同源 只要协议、域名、端口有任何一个不同,都被当作是不同的域。 1.2 限制范围 目前,如果非同源,共有三种行为受到限制: 1.3 其他 (“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domai 阅读全文

posted @ 2016-11-09 19:05 Surahe 阅读(311) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 闭包和高级函数
摘要:1、闭包 1.1 变量的生命周期 除了变量的作用域,另一个域闭包有关的概念是变量额生存周期。 函数内部用var声明的局部变量,退出函数时,会随着函数调用的结束而被销毁. 这里当执行var f = func()后,f返回了一个匿名函数的引用,它可以访问到func()被调用时产生的环境,而局部变量a一直 阅读全文

posted @ 2016-11-01 19:08 Surahe 阅读(288) 评论(0) 推荐(0) 编辑

柯里化与反柯里化
摘要:柯里化 什么是柯里化 柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。 柯里化的基础 上面的代码其实是一个高阶函数(high-order function), 高阶函数是指操作函数的函数, 阅读全文

posted @ 2016-10-28 18:24 Surahe 阅读(276) 评论(0) 推荐(0) 编辑

JavaScript设计模式与开发实践 面向对象
摘要:1 动态类型语言 静态类型语言编译时就已经确定变量类型,动态类型语言的变量类型要到程序运行时,变量被赋予某个值后,才会有类型。 静态语言的优点:首先,编译时就能发现类型不匹配错误,其次如果程序明确规定数据类型,编译器还能针对这些信息对程序进行优化,提高程序执行速度。 静态语言的缺点:迫使程序员按照强 阅读全文

posted @ 2016-10-25 15:56 Surahe 阅读(155) 评论(0) 推荐(0) 编辑

将光标放到文本末尾
摘要:Seleciton介绍:http://www.cnblogs.com/surahe/articles/5981847.html 阅读全文

posted @ 2016-10-20 18:11 Surahe 阅读(190) 评论(0) 推荐(0) 编辑

《你不知道的JavaScript》 原型
摘要:1 [[Prototype]] [[Prototype]]是对其他对象的引用,几乎所有对象在创建时[[Prototype]]属性会被赋予非空值。 引用对象属性时会触发[[Get]]操作,它会检查对象本身是否有这个属性,如果有就使用它,但a不在myObject,需要使用对象的[[Prototype]] 阅读全文

posted @ 2016-10-19 16:20 Surahe 阅读(187) 评论(0) 推荐(0) 编辑

《你不知道的JavaScript》 this
摘要:1、为什么要用this 如果不是要this,需要给函数显式传入上下文对象。 this提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将API设计得更加简介并且易于复用。 2、误解 2.1 指向自身 console.log产生了4条输出,证明foo()被调用4次,但foo.count是0。t 阅读全文

posted @ 2016-10-17 17:26 Surahe 阅读(353) 评论(0) 推荐(0) 编辑

《你不知道的JavaScript》 作用域闭包
摘要:一、什么是闭包 bar( )依然持有对该作用域的引用,这个引用叫作闭包。 无论通过任何手段将内部函数传递到所在词法作用域以外的,它都会有对原始定义作用域的引用,无论在何处执行这个函数都会产生闭包。 将内部函数timer传递给setTImeout,timer涵盖wait作用域的闭包,因此还保有对mes 阅读全文

posted @ 2016-10-12 15:56 Surahe 阅读(656) 评论(0) 推荐(0) 编辑

《你不知道的JavaScript》 函数作用域和块级作用域
摘要:一、函数作用域 可用在代码外添加包装函数,将内部的变量和函数定义隐藏。 这种技术必须声明一个具名函数foo(),foo本身“污染”了所在作用域。其次,必须显式地通过函数名( foo( ) )调用这个函数才能运行其中的代码。 包装函数的声明以 (function 而不仅以function开始,函数会被 阅读全文

posted @ 2016-10-10 17:03 Surahe 阅读(339) 评论(0) 推荐(0) 编辑