会员中心
用户名:    密码:    验证码:      免费注册会员

jquery手册   CSS2手册       请关注健康

CSSer > 客户端开发 > web标准与前台开发 > 在JavaScript中实现脚本import指令

来源:三月的蚁穴 作者:march 发布时间:2007-04-13
雅虎收藏夹 百度收藏 Google书签 Yahoo书签 新浪ViVi 搜狐网摘 365Key网摘 天极网摘 diglog 和讯网摘 POCO网摘 YouNote网摘 博拉网 天下图摘 Del.icio.us digg reddit spurl BlinkList blogmarks

在编写JavaScript时候,无论项目大小,都应该对所有*.js文件就行管理,尤其是面向对象的项目中。应该如Java一样,将每个类独立出来。但有个问题是JavaScript不支持脚本导入,这使得这个工作变得非常麻烦。

目前我找到了两种方式来做这个工作,即在JavaScript中模拟出import指令的功能。

XMLHTTPRequest对象 + eval();
创建<script>标签以及src属性

两种方式各有千秋。dojo中实现了两个方法:

模拟import的dojo.require();
模拟package的dojo.provide();

研究了一下代码,不过还是没弄明白它是怎么来实现这个dojo.require()的,不过应该可以肯定的是它没有使用创建<script>的方法,因为在生成的页面中没有额外的<script>。

前一阵把神奇一刻的JavaScript都规整了一下,建了个DisneyBox类和众多的子类,脚本的导入使用了创建<script>的方法。那么现在就分别介绍一下两中方法吧,其实都是很简单的一些技巧。

XMLHTTPRequest对象 + eval()函数

这种方法的原理如下:


利用XMLHTTPRequest对象把*.js文件以文本方式加载进来,并保存在responseText中
使用eval()函数将responseText中的文本转换成JavaScript脚本
这样做的好处是载入的脚本立即可以执行,但有可能会遇到很多eval()函数的问题。

创建<script>标签

原理如下:

用document.createElement(’script’)方法创建一个script元素
设置script元素的type和src属性
将此script元素用appendChild()方法添加到HTML文档中
这种方法的好处是能够比较安全的导入脚本,不需要再利用eval()来解析,但这样会在HTML中引入过多的文件,而且会有其他一些问题。

这里还有一篇很值得看的文章:Qomolangma实现篇(一):内核载入模块system.js的实现。对这两种方法做了更详细的叙述。

JavaScript 2.0的提案中引入了package的概念,而且提供了package和import指令,拭目以待它的实现吧。


相关文章