Farseer

导航

JavaScript

Ajax---JavaScript

JavaScript是被很多人误解的语言,这一点可以在稍候翻译的文章中体会到。JavaScript代码的管理确实是个问题,毕竟漫山遍野的JavaScript脚本让人头疼,但这不能归咎于JavaScript语言本身,由于人们往往将其定位于服务器端的补充,没有很好的IDE和代码管理工具,其实如果C#的IDE和代码管理工具跟JavaScript一样的话,C#也会被抱怨的。当然JavaScript有其自认的弱点,但它远比想像中强大的多。下面翻译的文章,试图澄清这个误解。JavaScript:The World's Most Misunderstood Programming Language

JavaScript:最被误解的编程语言
JavaScript, aka Mocha, aka LiveScript, aka JScript, aka ECMAScript是最流行的编程语言之一。事实上每台个人计算机上都至少安装了一种JavaScript解释器,并经常实用。JavaScript的流行完全归功于它作为www脚本语言的角色。
尽管它很流行,但几乎没有人知道JavaScript是非常不错的动态的面向对象的多功能编程语言。这为什么会成为秘密,为什么这门语言会遭受如此的误解?
名字
Java这个前缀暗示JavaScript与Java有某种程度的联系,它是Java的子集或者是Java的功能缩减版本。这个前缀看起来是特意选择用来制造混乱的,混乱进而引起误解。JavaScript不是Java,Java是Java,JavaScript是一门不同的语言。
JavaScript与Java在语法上有类似的地方,正如Java跟C有类似点一样。但是JavaScript不是Java的子集,正如Java不是C的一个子集一样。在Java(fka Oak)最初打算提供应用的领域,JavaScript做得更好。
JavaScript不是由Java的发源地Sun开发的,而是由NetScape公司开发的。它最初被称为LiveScript,但这不足以引起混乱,哈哈。
_Script这个后缀暗示JavaScript不是一门真正的编程语言,一门脚本语言通常比编程语言轻量级得多。但JavaScript确实是个例外。与C语言相比,JavaScript用效率换取了强大和有活力的表达能力。
穿着C外衣的Lisp(Lisp in C's Clothing)
JavaScript在语法上跟C类似,如大括弧和沉闷的声明,让它看起来象普通的过程语言。这是个误解,因为JavaScript更象功能性语言Lisp或者Scheme,而不是C或者Java.它采用数组而不是列表,采用对象而不是属性列表。函数是最初的类。它有闭包。可以获取lambda算子而不用匹配所有的括弧。
角色(Typecasting)
JavaScript被设计用来在NetScape浏览器上运行。它的成功促使它成为所有浏览器的事实标准。这也就给它角色做了定位.JavaScript是编程语言的George Reeves(译注:当George Reeves因为在TV中饰演了五年超人而获得国际声誉的时候,却在1959年死于枪击,官方认为是自杀,但是Kashner and Schoenberger 认为,无论如何,隐藏George Reeves死亡的真实情况的细节是不公平的)。JavaScript适合很多与Web无关的应用。
变迁的目标(Moving Target)
JavaScript的第一版非常弱。它缺乏异常处理,内联函数和继承。在当前的版本中,它已经成为了一个完全的面向对象的语言,但是JavaScipt的许多观点都是建立在不成熟的版本上的。
ECMA 委员会已经开发这门语言的扩展工作,但在好的意图下,它恶化了JavaScript的最大的问题:它已经有太多的版本,这制造混乱。
设计错误(Design Error)
没有程序语言是完美的,JavaScript也有自己的设计缺陷。比如用类型强制转换使+同时有加法和字符串连接的功能(译注:我觉得这没什么,几乎所有的语言都是这样的实现,只不过JavaScript是解释语言没办法预先发现这个错误而已),有错误倾向的with声明也应该避免。预定义字的要求太严格,另外分号的插入(译注:这里的插入指的是自动插入,因为JavaScript允许在语句的结尾省略";",而以一行的结束作为语句的结束)也是个很大的缺陷,正如正则表达式的符号。
这些缺陷已经导致了编程的错误,并且将这门语言的设计错误称为全局的问题。幸运的是这些问题中的大部分都可以通过这篇文章中提到的方法减轻。
这门语言的设计基本是很健全的,令人惊奇的是,ECMAScript 委员会好像对更正这些问题不怎么感兴趣,或许他们更关心开发新的版本。
糟糕的实现(Lousy Implementations)
JavaScript的早期实现中有很多问题,对这门语言影响很坏。并且,这些糟糕的实现还被嵌入到漏洞百出的浏览器中。
烂的书籍(Bad Books)
几乎所有关于JavaScript的书都是拙劣的,它们包含错误,糟糕的例子,并促成了糟糕的实现。语言重要的特性被糟糕地解释,或者干脆不提。我已经看翻了大量关于JavaScript的书籍,值得推荐的只有两本David Flanagan 的JavaScript: The Definitive Guide (4th Edition) 和Danny Goodman的Dynamic HTML (2nd Edition) ,都是O'Reilly出版的。
不合格的标准(Substandard Standard)
官方指定的说明规格是由ECMA出版的,这个规格及其拙劣,非常晦涩。它对烂书问题做出了“卓越”的贡献,因为"烂书的"作者已经不能用标准的文档来提高他们对这门语言的理解。ECMA 和TC39 难逃其咎!
业余爱好者(Amateurs)
大多数用JavaScript编程的都不是专业的程序员,他们缺乏书写优良程序的训练和指导。JavaScript有强大的表述能力,他们可以用它作很多有用的事情。这已经给JavaScript一个(译注:很不好的)名声,它是为业余爱好者设计的,不适合专业的程序员。这显然不是事实。
面向对象(Object-Oriented)
JavaScript是面向对象的吗?它有对象可以包含数据和操作数据的方法,对象还可以包含其他对象,它没有类,但它有构造器可以做类做的事情,包括作为类变量和方法的容器。它没有面向类的继承,但有面向原型的继承。
对象构造体系有两种主要的方式,继承(is a)和聚合(has a),JavaScript具有两者方式,并且动态的特性使它在聚合方面更胜一筹。
一些批评认为JavaScript不是真正的面向对象的语言,因为他们没有提供信息隐藏的功能,这是因为JavaScript没有私有变量和私有方法,所有的成员都是公共的。
但是事实证明JavaScript可以有私有变量和私有方法,当然几乎没人知道,因为JavaScript是这个世界上最受误解的语言。
一些批评认为JavsScript不是真正的面向对象的语言,因为他们没有提供继承。事实证明JavaScript不仅支持继承,而且支持其他方式的代码复用模型

OK,总算翻译完了,下面是文中推荐的一本书的下载:
JavaScript: The Definitive Guide (4th Edition)

posted on 2005-07-14 22:16  佛西亚  阅读(549)  评论(1)    收藏  举报