首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》第9章 JavaScript编程规范和应用

关灯直达底部

每种语言都有自己的不足之处,都存在低效模式。随着越来越多的人选用JavaScript语言,它的应用边界也在不断扩展。自2005年以来,Ajax应用对JavaScript和浏览器的推动作用远超过以前,其结果是出现了一些非常具体的模式,这其中有优秀的做法,也有糟糕的做法。

也许,很多程序员会无休止地讨论良好的语言风格是由什么构成的。有些程序员坚定地拥护曾经的用法,比如在学校或在开始工作时养成的编程习惯,完全没有代码风格的意识。事实证明,代码风格在编程中是非常重要的,就像文字风格对于写作非常重要一样。好的代码风格能够更好地阅读,更为关键的是能够提高代码的执行效率。

建议165:不要混淆JavaScript与浏览器

语言和环境是两个不同的概念。提及JavaScript,很多读者可能会想到浏览器。脱离环境的JavaScript代码是不能够运行的,这与其他系统级的语言有着很大的不同。例如,C语言可以用于开发系统和制造环境,而JavaScript只能够寄生在某个具体的环境中才能够工作。

JavaScript运行环境一般都由宿主环境和执行期环境构成。其中宿主环境是由外壳程序生成的,如浏览器就是一个外壳程序,它提供了一个可控制浏览器窗口的宿主环境。执行期环境则由嵌入到外壳程序中的JavaScript引擎(或称为JavaScript解释器)生成,在这个环境中JavaScript能够生成内置静态对象和初始化执行环境等(如图9.1所示)。

图 9.1 JavaScript运行环境

(1)宿主环境

宿主环境一般由外壳程序创建和维护,它不仅为JavaScript语言提供服务,还可以运行很多种脚本语言。这与Java虚拟机功能类似。

宿主环境一般会创建一套公共对象系统,这套对象系统对所有脚本语言开放,允许它们自由访问。同时,宿主环境还会提供公共接口,用来装载不同的脚本语言引擎。这样可以在同一个宿主环境中装载不同的脚本引擎,并允许它们共享宿主对象。

脚本语言与独立的语言是有区分的,JavaScript是一种脚本语言,它本身不提供I/O(输入和输出)接口,也没有与系统和外界通信的能力,更不能够有操作外围设备、管理内存、修改注册表等更低级的行为,这些功能全部交给宿主环境来完成。例如,在客户端浏览器(外壳程序)的宿主环境中,JavaScript通过window对象的alert方法以及document对象的write和writeln方法输出信息,而借助window对象的prompt方法接收信息。当然,在其他宿主环境中可能会使用不同的宿主对象来完成以上功能。例如,在Windows环境中,微软公司开发的WSH(Windows Script Host)就是一种脚本语言的宿主环境,它就定义了wscript对象(类似window对象)来表示全局对象。

不仅Web浏览器是外壳程序,只要能够提供JavaScript引擎执行的环境都可以算做外壳程序。很多服务器、桌面应用系统也都提供能够允许JavaScript引擎执行的运行环境,这些运行环境也是宿主环境。同时,大部分JavaScript引擎自身也带有一个用于代码调试的程序,在这个简单的程序被运行时,也会创建一个宿主环境。

另外,外壳程序还可以通过符合标准的扩展接口接纳更多的插件、组件或ActiveX控件等.DLL扩展应用。例如,Web浏览器自定义的DOM组件,这个符合W3C标准的DOM组件就是通过宿主环境与JavaScript引擎进行联系的。Web浏览器允许JavaScript引擎对其进行控制,并通过DOM组件实现对HTML或XML文档的操作。

(2)执行期环境

执行期环境是由宿主环境通过脚本引擎创建的,实际上就是由JavaScript引擎创建的一个代码解析初始化环境。初始化内容主要包括:

❑一套与宿主环境相联系的规则。

❑JavaScript引擎内核(基本语法规范、逻辑、命令和算法)。

❑一组内置对象和API。

❑其他约定。

当然,不同的JavaScript引擎定义的初始化环境是不同的,这就形成了所谓的浏览器兼容性问题,因为不同的浏览器使用不同的JavaScript引擎。