asfman
android developer
posts - 90,  comments - 213,  trackbacks - 0

JavaScript:
世界上最被误解的语言

Douglas Crockford
www.crockford.com

http://www.nirvanastudio.org/

JavaScript, 亦称为 Mocha LiveScript,也叫做 JScript ECMAScript ,是世界上流行的编程语言之一。事实上世界上差不多每台个人电脑都至少安装了一个JavaScript解释器。JavaScript的流行完全在于它作为WWW的脚本语言的角色。

不管它有多么流行,极少有人了解JavaScript是一个十分动态的通用面向对象编程语言。这怎能成为一个秘密呢?为什么这个语言如此被误解?

关于名字

这个Java-前缀暗示了JavaScriptJava的关系,也就是JavaSciptJava的一个子集也就是不如Java强大。看上去这个名称就故意制造混乱,然后随之而来的是误解。JavaScript并不是解释型的Java语言。Java是解释型的JavaJavaScript是另一种语言。

JavaScript Java的语法很相似,就象JavaC的语法相似一样。但它也不是Java的子集就像Java也不是C的子集一样。在应用上,Java要远比原先设想的好得多(Java原称Oak)。

JavaScript 并不是由Sun公司──Java的老家──开发的。JavaScript是由Netscape公司开发。它本来叫做LiveScript,这个名字倒并不是那样容易混淆。

这个-Script后缀暗示了它不是一个完整的编程语言──似乎脚本语言不是真正的编程语言。但其实这是一个专长的问题。相对C而言,JavaScript牺牲了性能但带来更强的表达力和动态性。

披着C外衣的Lisp

JavaScript C风格的语法,包括大括号和复杂的for 语句,让它看起来好象是一个普通的过程式语言。这是一个误导,而事实上JavaScript和函数式语言如LispScheme有更多的共同之处。它用数组代替了列表,用对象代替了属性列表,而且函数是第一型的,同时还有闭包。你不需要平衡那些括号就可以用lambda算子。

思维定势

JavaScript 是原本只是被设计在Netscape Navigator 中运行的。Netscape的成功让JavaScript成为几乎所有浏览器的标准配置。这导致了对JavaScript的思维定势。JavaScript简直就是程序语言中的George Reeves(一位曾扮演超人的演员,但后来死于枪杀,被官方认为自杀,细节不详──译注)。而事实上,JavaScript也适合很多和Web无关的应用程序。

不断改变的目标

JavaScript 的第一个版本功能十分弱。它缺少异常处理、内部函数和继承。而它的现在的形态,它已经是一套完整的面向对象语言。但很多看法都是基于认为它的形式不成熟。

管理这个语言的ECMA委员正在开发扩展,原意是很好,而这样做却会加剧这个语言本来就最严重的问题:版本太多了。这也造成了很多混乱。

设计错误

没有什么编程语言是完美的,JavaScript当然也有它的设计上的错误,如+的重载同时表示加和带类型转换的串连接,和有错误倾向的 with 语句——应该避免使用。Javascript的保留字策略过于严格。分号的加入是一个很大的错误,正则表达式的记号也是。这些错误会导致编程错误,并导致语言的设计的全局层面上的问题。幸运的是,这些问题可以用一个很好的lint程序来避免。

这个语言的设计从整体上看还是十分健全的。但很令人惊讶的是, ECMAScript委员会好象根本不想修正这些错误。也许他们对重新设计一个更感兴趣。

肮脏的实现

JavaScript的早期实现错误百出。这对该语言带来了很恶劣的影响。更糟糕的是,这些实现还被嵌入的更错误百出的浏览器中。

拙劣的书籍

几乎所有的书籍都十分恐怖。里面到处是错误、蹩脚的例子还自创一套拙劣的惯例。语言中重要的特性却常常解释不好,或者干脆完全不写。我翻阅了几十本JavaScript的书,我只推荐两本:JavaScript: The Definitive Guide (4th Edition) by David Flanagan and Dynamic HTML (2nd Edition) by Danny Goodman. 都来自于 O'Reilly.

不够标准的标准

该语言的官方标准规格说明书由ECMA发布。但该规格书也是质量奇差。它难以阅读也难以理解。它也对拙劣书籍的问题作出了自己的一份“贡献”,因为作者无法使用这个标准文档来增加他们对语言的认识。ECMATC39委员会应该为此感到深深的羞愧。

业余爱好者

大部分写JavaScript的人都不是程序员。他们缺乏训练写好程序的修养。JavaScript有如此丰富的表达能力,他们可以任意用它来写代码,以任何形式。这给JavaScript带来了一个名声──它是专门为外行设计的,不适合专业的程序员。这显然不是事实。

面向对象

JavaScript 是不是面向对象的?它拥有对象,可以包含数据和处理数据的方法。对象可以包含其它对象。它没有类,但它却有构造器可以做类能做的事,包括扮演类变量和方法的容器的角色。它没有基于类的继承,但它有基于原型的继承。

两个建立对象系统的方法是通过继承(是一个……)和通过聚合(有一个……)。JavaScript两个都有,但它的动态性质让它可以在聚合上超越。

一些批评说JavaScript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。

但又有证明了JavaScript对象可以拥有私有变量和私有方法。当然,极少有人认识到,因为JavaScript是世界是最受误解的程序嘛!

另外还有批评说JavaScript不能提供继承,这里证明了JavaScript不仅能支持传统的继承还能应用其它的代码复用模式。

Copyright 2001 Douglas Crockford.All Rights Reserved Wrrrldwide.


posted on 2005-04-21 22:45 ShiningRay 阅读(1274) 评论(3)  编辑 收藏收藏至365Key 所属分类: JavaScript

What People Are Saying About This Post...

# re: JavaScript:世界上最被误解的语言 2005-06-09 09:30 mikespook
原文“Despite its popularity, few know that JavaScript is a very nice dynamic object-oriented general-purpose programming language.”

译文“不管它有多么流行,极少有人了解JavaScript是一个十分动态的通用面向对象编程语言。”

我觉得这里的翻译有点问题哦~~

dynamic不光是动态的意思,还有强大、动力的意思,我觉得这里翻译成强大比较合适~~~
  回复
  

# re: JavaScript:世界上最被误解的语言 2005-06-09 14:45 ShiningRay
这个……
是啊,所以很难说,我再琢磨琢磨,谢谢你的提醒  回复
  

# re: JavaScript:世界上最被误解的语言2005-11-20 16:17 timshaw
翻译的不错啊,赞,不过现在真不清楚js到底是给谁用得了,我经常要从java和js之间切换,真不爽,如果有个java-〉js的转换器就好了。  回复
  
posted on 2006-04-11 10:05 汪杰 阅读(160) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(15)

随笔分类(1)

随笔档案(90)

文章分类(727)

文章档案(712)

相册

收藏夹

http://blog.csdn.net/prodigynonsense

友情链接

最新随笔

搜索

  •  

积分与排名

  • 积分 - 468991
  • 排名 - 6

最新随笔

最新评论

阅读排行榜

评论排行榜