这些天在为Qomo项目写“JavaScript面向对象的支持”这组文章。也一直在期待网上购得的那本《JavaScript 权威指南》(第四版)快快到来。
在前公司,有这本书的第二或第三版,也一直将这本书视为经典。但那时并没有深入的去看它前几章的概念性叙述,而是把它当成一本手册来查。现在却刻意地关注了,因为Qomo的底层是以纯理论的OOP为基础的。
今天这本书终于寄到了,但是一读之下,大失所望。不知道作者对JavaScript语言的理解能力不够,还是他对OOP的理解不够。《JavaScript权威指南》这本书对面向对象的叙述不但不专业,而且还错误百出。实在不值一看。
试举几例:
× JavaScript没有正式的类的概念,……,它用构造函数和原型对象模拟了类
事实上,JavaScript的确没有正式的类的概念,但模拟类的只是构造函数而不是类。因为类是“声明”,对象是实体。用“实体”去模拟“声明”原本就说不通。在JScript中,类的检测是通过对构造函数来进行的,而不是一种基于原型的检测。
× JavaScript中的实例属性是那些在对象中用构造函数创建的或初始化的属性
这个问题出现在所谓的“实例属性”还有一种与构造函数无关的情况,也就是直接对原型属性声明。例如“MyObject.prototype.prop_1 = 'abcd'”,因此上面这种定义是不完整的。
×类属性与类方法
JavaScript中没有“类”,因此也没有类属性与类方法。只不过构造器(函数)也被对象系统理解为“对象”,因此构造器也可以创建新的属性和方法。——这只是它作为一个“单独的对象实例”的特性而已,把这个作为类属性和类方法,很不合逻辑。
类似这样的问题非常之多,显得作者的逻辑很混乱。作者甚至没有办法为读者理清脚本环境与DOM环境的异同,这在第四章关于局部变量、执行环境和作用域等问题的讨论中(4.6~4.7节)尤其突出。
因此,我相信没有多少人能读明白这本书有关JavaScript中对象系统的描述。此外,这本书将JavaScript、DOM和CSS这几种不同层次的体系揉到一起来讲述,尽管使这本书内容显得更为丰富而且刺激了购买,然而也使读者不得不在几个不同的泥坑中跳来跳去,最终无所适从。
因此作为建议,最好是把这本书当成一本手册来查阅,而不是当作理论上的经典。随便说一点,这不是翻译的过错,而真的是作者的问题。
出自同一家出版社的《Delphi技术手册》的翻译被一些人骂得很惨,但事实上是读不懂书的人在胡言。——那本书的翻译得是非常精道的,一些看似拗口的译文其实很精准,多读两遍就懂了。与此相较,这本《JavaScript权威指南》的作者,看起来对“JavaScript的对象系统”就未必深彻地了解和思考过了。