今日份好书推荐:JavaScript设计模式与开发实践
内容简介 · · · · · ·
本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。本书将教会你如何把经典的设计模式应用到JavaScript语言中,编写出优美高效、结构化和可维护的代码。
作者简介 · · · · · ·
曾探
2007年毕业于吉林大学软件学院。就职于国内知名前端团队腾讯AlloyTeam,高级工程师。
平时喜欢电影和音乐,业务时间也是一名健身教练。
JavaScript设计模式与开发实践的笔记(15)
>我来写笔记
按有用程度按页码先后最新笔记
展开
1.2 多态 4froatace
一段“多态”的 Javascript代码 我们把上面的故事用 Javascript代码实现如下 var makesound - function( animal )f if( animal instanceof Duck ) console。1og();else if animal instanceof Chicken ) console。g(略略略);} var Duck=functions;var Chicken=function;makesound( new Ducko /嘠嘠 makesound( new Chicken());/略咯咯 这段代码确实体现了“多态性”,当我们分别向鸭和鸡发出“叫唤”的消...
2022-01-22 16:59:27
展开
第211页 装饰者模式橡树
最后看看测试结果:... // 分别输出:发射普通子弹、发射导弹、发射原子弹 这个应该是通过 plane.fire() 触发的,依次输出的,而不是分别输出的。相当于这个飞机发射出三种子弹,而不是每种飞机发出一种子弹,感觉这个例子不是特别好。
2017-08-11 15:57:13
展开
第164页 模板方法模式橡树
感觉这个模式更像是一个超类的实现,就是把多个类的公有属性或者方法提取到一个更抽象的父类层面。
2017-08-10 16:51:56
展开
第126页 命令模式橡树
设计模式的总是把不变的事物和变化的事物分离开,... 这句话是所有设计模式的主题,都在围绕这个主题设计代码结构
2017-08-10 09:53:05
展开
第109页 迭代器模式橡树
原文中的迭代器如下:var iteratorUploadObj = function() { for (var i = 0, fn; fn = arguments[i++]; ) { var uploadObj = fn(); if( uploadObj !== false ){ return uploadObj; } }; }; 其实可以用下面这种方式也不错,就是把所有要迭代的函数放入一个数组中,然后迭代这个数组。const funs = [getActiveUploadObj, getFlashUploadObj, getFormUploadObj]; // 其中 funs 是一个数组,这个数组的每个元素就是要迭代执行的...
2017-08-09 11:43:41
展开
第63页 单例模式橡树
4.3 用代理实现单例模式 接下来引入代理类 proxySingletonCreateDiv:... var a = new proxySingletonCreateDiv('sven1'); var b = new proxySingletonCreateDiv('sven2'); 这段代码中其实 new 也是没有必要的吧?直接 proxySingletonCreateDiv('sven1'), proxySingletonCreateDiv('sven2') 就可以吧?
2017-08-07 14:17:36
展开
第60页 单例模式橡树
4.1 实现单例模式 第一段代码 var Singleton = function(name) { this.name = name; this.instance = null; } 这个 this.instance = null 有什么用吗?
2017-08-07 11:25:35
展开
第284页 20.3用对象的多态性消除条件分支星堡a (豆瓣越来越年轻了)
实际上,每当我们看到一大片的 if 或者 swtich-case 语句时,第一时间就应该考虑,能 否利用对象的多态性来重构它们。
2017-07-24 10:27:09
展开
第70页 3.2高阶函数星堡a (豆瓣越来越年轻了)
uncurring的目的 那么有没有办法把泛化 this 的过程提取出来呢?本小节讲述的 uncurrying 就是用来解决这 个问题的。为什么要把this提取出来?还是与call apply的目的相同吧。方法中用到 this 的地方就不再局限于原来规定的对象,而是加以泛化并得到更广的适用性。Function.prototype.uncurrying = function() { var self = this; return function() { var obj = Array.prototype.shift.call(arguments); return self.apply(ob...
2017-07-20 16:31:37
展开
第72页 3.2高阶函数星堡a (豆瓣越来越年轻了)
分时函数,感觉就是js里面的自动分页。没有仔细看代码实现方式 var timeChunk = function(ary, fn, count) { var obj, t; var len = ary.length; var start = function() { for (var i = 0; i < Math.min(count || 1, ary.length); i++) { var obj = ary.shift(); fn(obj); } }; return function() { setInterval(function() { if (ary.length === 0) { // 如果全部节点都已经被创建好 return clearInterval(t); } start(); ...
2017-07-20 16:03:14
第202页 中介者模式
Tars (求之不得,再求之)
if((number-0)|0 !== number-0)的条件语句中,作者意图筛选出正整数,但是明显筛选出来的并不是,如下:var fn = function (n){return ((n-0)|0)!==(n-0);}; 但看看下面的结果可知:0和负数都被筛选掉了,也就是说0和-1都被认为有效的数字。这点明显不合逻辑:fn(-1); false fn(0); false
2016-01-13 20:29:56
展开
第155页 模板方法模式Tars (求之不得,再求之)
在创建Coffee的实例的时候应该注明在非全局模式下,否则会把Coffee的‘类’覆盖掉
2016-01-13 16:21:40
第123页 发布订阅者模式Tars (求之不得,再求之)
121-124大段大段整页的代码,居然没有注释,而且排版缩进都有点乱。
2016-01-12 21:24:38
展开
第78页 策略模式Tars (求之不得,再求之)
下面的代码注释中,duration的注释应该是‘持续时间’,板书写成‘持续事件’了。
2016-01-11 21:32:25
展开
第77页 策略模式Tars (求之不得,再求之)
最低下的那几个缓动算法接收的第三个参数应该是初始值到目标值的变化量,而不是书中所书的目标位置吧。
2016-01-11 21:26:31