面向对象的JavaScript编程读后感

2012年11月4日

这几天在读凌大侠的《面向对象的JavaScript编程》。

面向对象编程,我在大一就开始学习了。在分支、循环、函数调用、变量、结构体、指针、函数指针以及malloc这些基石之上,从封装到继承到多态,从组合到接口到设计模式,从map到filter到reduce,处处彰显着程序设计的魅力。

另一方面,JavaScript也是我在大一学习的一门编程语言。之前在高三时候在老师的悉心教导之下学习了HTML(这一定要归功于我的母校上海交通大学附属中学),所以,虽然JavaScript在大学里是没有这门课的,我也通过自学把这门语言学了下来。

但是,JavaScript始终在我看来是面向过程的编程语言。少数情况下,我会用它的this语法来创建一些对象,但即便如此,这些对象还是被当作结构体使用。prototype可以用来为对象添加成员函数,但是,一个挥之不去的问题是,如何实现继承,关键是优雅地实现继承。

如果只是接口,那我想通过在结构体中包含多个函数指针(或者,在JavaScript中是函数引用),就可以实现这一功能。这样能实现多态。继承就算不能直接实现,用组合来代替也未尝不可。但是,程序员不是一个人在说话,也不是一个人在编程。他需要和别的程序员交流,因此同样用JavaScript,他的程序中的面向对象思路也要和别的程序员能有一种较为标准的方式进行沟通,所以,最好有一种业界公认的方式,而在我看了这本书的标题之后,感觉它则恰恰很有可能提供了这种方式。这样,它的价值就体现出来了。

初看这本书的名字,怀疑作者会不会直入主题,假定读者已经熟悉JavaScript而直接讲如何用它作面向对象编程。但是,后来发现并非如此。它在引言中讲述了JavaScript的历史,然后从一些JavaScript的基础内容开始讲起。初看似乎对于用过JavaScript的人来说没有太大必要,但是仔细阅读后发现,它的内容是有针对性的,针对JavaScript的一些与众不同的对象特性作了一些深入挖掘,例如,undefined与null之间的区别,NaN是如何产生的,”” + null + undefined会是什么,null == undefined的计算结果是什么,==与===之间的区别是什么,如何动态删除一个变量,等等。

凌大侠的翻译,准确而生动,读起来很舒服。而且凌大侠在一些作者没有特别留心,但对初学者容易误导的地方,根据他多年来积累的学识作了注解,从而让初学者不容易误入歧途。这也是我将来在写文章时要向凌大侠学习的地方。

还没读完,期待从中收获更多。

留下您的评论