日期:2014-05-16  浏览次数:20373 次

《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了,估计你也会这样。

试读章节文字很流畅,感谢作者,翻译和博文视点,可惜试读内容太少,很不过瘾,糟粕部分的描述只提到了最糟糕的全局变量。其它我想应该会包括变量的作用域吧。
确如译者所言,这本书很薄,但承载的内容却非常的丰厚和深入。