一本对JavaScript设计模式解读的书籍,并结合实践_JavaScript设计模式与开发实践书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript设计模式与开发实践 > 一本对JavaScript设计模式解读的书籍,并结合实践
非走不可 JavaScript设计模式与开发实践 的书评 发表时间:2015-08-11 22:08:38

一本对JavaScript设计模式解读的书籍,并结合实践

       之前看过《javascript模式》一书,那是一本颇受好评的书籍。而本书则是在设计模式上对模式一书的进一步扩充。
       本书的一大特点就是结合实际,代码较完整,能直接应用到实际开发中,不过从作者的代码书写风格和严谨方面考虑来说,书中有一些错误。
       由于有些错误需要重写代码,而一些则是看似“吹毛求疵”的问题,所以就没有去图灵社区提交勘误,但在此一并提出:

迭代器迭代数组的一个案列:
 while(!iterator1.isDone()&&!iterator2.isDone()){}这里的while条件意思是只要有一个迭代器迭代到数组的最后一个元素就完成循环了,因此要迭代的数组为[1,2,3]和[1,2,3,4]时,该代码认为他们是相等的,所以应该把"&&"换成"||"。但这样改也是不够的,[1,2,3]和[1,2,3,undefined]仍被认为是相等的。

作者喜欢将for循环的判断语句用来迭代数组,形如:for(;list[i++];)。在本书的案列和大部分情况下是没问题的,但是这个数组中的某个值为假值时,情况可能就不如所愿的。但作者未提及。

发布订阅模式的8.5小结:P114让所有对象都安装发布订阅功能。这里是通过浅复制实现的。所以所有通过该方法实现具有发布订阅功能的对象,实际都共享的是同一个“缓存列表”,因此他们的回调函数也是共享的而不是独自拥有的。(当不同对象订阅了同一个事件该问题就显示出来了)

P202的中介者模式中,作者使用if(((number-0)|0)!==number-0){}来判断用户输入的购买数量是否为正整数。意思是非正整数会进入条件分支。比如1.2,2.1,0(0不是正整数)。但是number为0并不会进入条件分支。从作者的实际意图来说,数量为0并不是“正确的购买数量”,所以在条件判断中应该多加一个表达式来判断。

P133中if(command){//***}条件command是由高阶函数makeCommand返回的一个函数。他始终是一个函数,所以command转为布尔值为真,因此这个判断这么写是错误的。

P268 作者的arrayMap函数是在模仿Array.prototype.map函数。不过需要注意:Array.prototype.map函数接受的回调函数的参数应该是(value,index,context),而作者的代码实际模仿的是jquery的map方法。

       除了这些问题,还有一些比较小的问题,或者说不是问题,这里就不讨论了。此外本书缺少对原型链的讨论,因为有些模式可以通过原型链实现。

       抛开这些小小的瑕疵,从这本书中能收获比较多的知识,能够让自己的代码写的更加美观。特别是最后几章作者列出的几点原则比较有参考性,而一些与编程无关的举例具有画龙点睛的作用,很有启发。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

对“一本对JavaScript设计模式解读的书籍,并结合实践”的回应

dean 2015-08-14 17:58:03

看的太仔细了,我自己认真看一遍也未必看的出这些问题,惭愧。:)

dean 2015-08-14 17:57:10

非常感谢这位仁兄提出的问题。一一属实,有些确实是当时粗心导致,争取在再版的时候改过来。