技术开发 频道

是什么让我们爱上Javascript

  帝国的重建

  在那段时间,我还是不断听到更多关于JavaScript的消息。关于基于prototype和面向对象的特性的介绍总是让我很好奇,我曾经看到过的教材里从来没有提到过这些,也许是作者本人也没有必要的语言背景去将这些概念联系起来。同时,人们开始指出由于浏览器造成了多少错误,而不是JavaScript本身。

  后来,IE赢了,Netscape投降了,这一阶段的浏览器大战结束了。Miscrosoft开始将他们的bug光芒覆盖到CSS领域(任何处理过IE6下页面开发的工程师都应该深有感受),而Mozila的团队则开始认真的考虑兼容性的问题。除了一些根深蒂固的区别,想要修改他们必须大量的修改源码,这个小组修复大多数的不同,于是IE和Mozilla/Firefox下的JavaScript变得更可控了。其他的开发者也更加的有迹可循。

  JavaScript和浏览器的内置支持开始进入了一段稳固的发展时期。在我们大家都忙着写自己的JavaScript代码的时候,几乎没有人注意到一个具有传奇色彩的特性引入-XMLHttpRequest.最重要的DHTML特性,Ajax的重要部分,悄悄的加入到了IE中来。Microsoft的Outlook小组引入了这个ActiveX控件来使Outlook支持网络访问。200年的Ajax Experience的大会上,Dion Almaer和Ben Galbraith做了很多关于XMLHttpRequest的工作,但是在Mozilla第一次引入XMLHttpRequest支持的时候的官方文件中,他的特性根本就没有提到。

  那段时间有很多JavaScript的活动,在JavaScript的支持下,Macromedia为Flash提供了脚本语言支持。Adobe也在不断努力使他们的很多程序可以使用JavaScript来控制和扩展。Apple将JavaScript嵌入了它的Sherlock应用中。当然,Mozilla项目也做出了一个重要决定,他们大部分的浏览器都可以支持JavaScript.很明显,JavaScript已经不再仅仅是一个网页语言,而成为了程序中嵌入的动态的、运行时扩展的编程语言的首选。其中的原因也许是当时大家或多或少的都会一些JavaScript,还有当时存在两个高质量的嵌入扩展(SpiderMonkey c语言编写,Rhino Java语言编写)。

  在2000年的时候,一些人(著名的Brent Ashley、Alex Russell、Douglas Crockford)开始注意到JavaScript究竟能做什么。Brend开始研究JavaScript与服务器通信的方法,提出了我们现在公认的Ajax Style.而且在当时浏览器对于XMLHttpRequest支持不是很完善的时候,他增加或者形成了很多完成这项处理的很多巧妙的方法。他建立了一个网站“Remote Scripts Resources”,并且编写了一个JavaScript Remote Scripting (JSRS)库来支持不同浏览器的兼容性。

  Alex Russel建立了一个netWindow项目,意图建立一个支持富UI、可编程、图形环境的网页,同时带有完全可拖动的窗口和其他小组件,netWindows变成了nWigets,并且最终催生了Dojo Project,一个当前重要的Ajax框架。

  Douglas Crockford一直在研究JavaScript语言的丰富性,最后他发布了一系列有建设性的文章,例如:The World's Most Misunderstood Programming Language,在这些文章中,他指出了JavaScript在使用中的一些技巧和一些缺点。

  Brent、Alex和Doug当时的声音都很薄弱,就像旷野中的呼声,但是当最后其他的Web开发社区准备将注意力投向JavaScript的时候,他们所作的这些工作让我们的生活变得更加简单了。

  我在2000年到2003年中段的时候,对于JavaScript的关注都只是一些零星的片段,我确实没有投入太多的关注,我沉浸在Java的乐土中,闲暇的时候研究一下Ruby,而正是这段经历为我再一次的认识JavaScript提供了准备。

  在2003年的6月,我的朋友给我演示了netWindows,当我从地板上捡起我的下巴来以后(After i pick my jaw up off the floor,作者还真是幽默),我朋友告诉我说Alex这个人不是疯子,我如梦方醒开始认真的研究JavaScript,现在看来,当时Google也有一帮人在做同样的事情。

  伟大的革命

  每个看这篇文章的人都应该知道一些Ajax第一次引爆屏幕的情景,今天我来简短的说一些完整的情节。

  第一个引起我注意的Ajax应用是Gmail.很明显,他先是下载了很多的JavaScript,然后在后台不断地与服务器进行通信,避免页面的刷新。他确实给人非常深的印象,同时也给其他的技术团队带来不知所措的感觉。我当时在想Google一定是有一个非常成熟的定制化工具来开发如此复杂的客户/服务器端管理。

  真正让我明白的是Google的Google Suggest.现在的人一定很熟悉,当我们输入的时候,通过与服务器的交互将我们可能需要的词条显示出来供我们选择。

  Google Suggest在两个方面让我印象深刻,第一是他是如此简单以至于大多数的技术人员都能够明白他的工作原理并且应用到自己的网络项目中;另外一个是Google Suggest针对用户的每次keyup事件进行相应和通信,让我看到同服务器通信是如此的简单,我完全被折服了。

  不久以后又袭来了Google Maps,Jess James Garret形成了Ajax这个术语,从此以后讨论变得更加方便。

  从此以后,Ajax变成了我们处理网络应用的的标准方法。而且现在我们有了更多的工具和第三方库选择,但我们又陷入另一个难题:选择太多了。

  停止担心,爱上DOM

  我已经阐明了为什么JavaScript有这个名声的众多原因,其中有好的也有坏的,在这众多的原因中,我只想重复一条,他是如此重要,能够解释为什么很多有经验的程序员经给被自己的经验所蒙蔽。

  这一部分作者以一个例子来说明了JavaScript的编写方式和Java是多么的不同,最后提出了一些有意义的总结:Functions are first-class objects. Methods are just functions attached to objects. You can add methods to classes at any time (even after instances have been created)。

  Individual objects can have their own methods. ``Class constructors'' are just functions. Functions, being objects, can have their own properties. You can call functions with fewer (or more) arguments than the function is declared to take. If no value is passed for a function argument, it gets the value undefined.

  总结最后让我们每一位JavaScript开发者来正确的认识JavaScript,用它来完成他应当完成的任务。

0
相关文章