`

《JavaScript语言精粹(修订版)》试读-- 厚积薄发的好书

阅读更多

     javascript方面的好书很多,比如Nicholas C. Zakas写的几本我都喜欢。但大多数主要讲述浏览器的前端开发技术,对于javascript只是介绍语法,而没有对语言本身进行过评价。那本犀牛书(《javascript权威指南》)非常棒,内容完整又处处闪烁着真知灼见,不过那本书太厚太重了,只适合放在书架上作参考书。从编程范式的角度来说,javascript作为一门动态语言,集过程式、对象式、函数式、事件驱动式、元编程等于一身,强大与优雅超乎想象,但在实践过程中,却是很容易弄糊涂,仔细想来,完完全全的关注javascript语言本身,而且是分析它的优缺点书好像只有这本。

     试读的部分很简短,一会儿时间能让我来回看几遍,我是如此的赞同作者的观点,以致于迫不及待的想表达自己的浅见。
1、关于动态对象
在接触javascript之前,我了解的VB、Delphi、Java、C#等都是先有类型Class,再根据类型new一个对象实例,这种观念是如此的根深蒂固,以致于我认为所有的OO都是如此。所以一度对javascript的this、原型链很是困惑。后来才逐渐觉得这种方案同样美妙,比如我印象中一篇讲青蛙对象的

// 一开始啥都不是
var life = {};
// 然后是卵细胞
life.body = "卵细胞";
life.say = function(){alert(this.body)};
// 再变成蝌蚪,长出了尾巴和腮
life.tail = "尾巴";
life.gill = "腮";
life.body = "蝌蚪";
life.say = function(){alert(this.body+"-"+this.tail+","+this.gill)};
// 最后变成青蛙,没有了尾巴和腮,但是长出了肺
delete life.tail;
delete life.gill;
life.legs = "四条腿";
life.lung = "肺";
life.body = "青蛙";
life.say = function(){alert(this.body+"-"+this.legs+","+this.lung)};

 

这是一个青蛙对象,在不同的阶段属性是不同的,方法也可以是不同的。如果用类型来描述,需要罗列出所有的属性,每个再给出类似hasTail、hasGill的判断方法,这样既不方便也不自然。而动态类型是如此的简洁和美妙,在结构和功能都充分体现了动态,让我思考OO非要Class吗?

2、关于函数
大多数语言代码和数据是截然不同的东西,但在javascript里代码也可以作为数据。
看看 var i=5 和 var f = function(alert('test')); 这没什么不同。
在javascript函数也是对象,它的特殊在于可以被调用。

3、关于原型继承
方法调用时如果this对象里没有本方法,那么就去找它的原型对象是否有这个方法,如果还没有,继续找原型的原型。
这意味着我可以把公共方法和静态的属性放到公共原型中,这样,大量新建的对象可能只要保留自身特有的属性值就可以了。

4、对象字面量
用一条语句可以建立包含多个层次的对象,简单而优雅。
在用过json之后,我再也不想用xml了,估计你也会这样。

     这不是一本给初学者的书,如果你尝试过用javascript建立自己的对象体系,开发js组件或者去分析Dojo、Ext JS这样的大型js库的话,你会因为作者的很多看法而引为知己。否则如果你读过上个版本的话,相信它清晰的论述能解开你心中的迷惑。至少它介绍的函数的四种调用模式让我有醍醐灌顶的感觉。
     试读章节文字很流畅,感谢作者,翻译和博文视点,可惜试读内容太少,很不过瘾,糟粕部分的描述只提到了最糟糕的全局变量。其它我想应该会包括变量的作用域吧。确如译者所言,这本书很薄,但承载的内容却非常的丰厚和深入。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics