在一个 js 文件中是否可以再包含另一个 js 文件?

时间:2022-09-29 16:05:12
问题如标题:

    在一个 js 文件中是否可以再包含另一个 js 文件?

就象在 java 中可以用 import 的方式包含另一个类,但不知道 js 中是怎么弄的。

请指教,谢谢!

25 个解决方案

#1


document.write('<script src="test.js"></scri' + 'pt>');

#2


没有现成的方法,可以自定规则做一套类似的方案。

#3


我最近也遇到这个问题,欢迎交流!QQ:17766922

#4


因为项目中用到的 js 较多, 就考虑写一个脚本库, 但脚本库中 js 文件多了以后, 可能就会存在互相引用的问题, 这个问题搞了很长时间了, 还是找不到方法解决.

#5


我写了一个 javascript framework ,从系统级解决了此类问题!

#6


动态加载JScript不是JavaScript完全可以实现。去看看prototype.js,会有启发的

#7


prototype.js 的强项不是载入管理JS代码,它只是给了你一些基础的脚本库和类继承方法罢了

#8


我写了一个 javascript framework ,从系统级解决了此类问题!
——————————————————————————————————

我也写了一个耶,meizz(梅花雪) 你什么时候发布啊?

#9


写JS的东西,现在感觉很提不起干劲。

............... :<

#10


prototype.js 是什么?请指教。

#11


我看见那颗钻石就眼馋,梅前辈!

#12


js的动态引用方法:
  
function(jsSrc){
   var head=document.getElementsByTagName("head")[0];
   var scripts=head.getElementsByTagName("SCRIPT");
   for(var i=0;i<scripts.length;i++){
   var src=scripts[i].src;
   if(src==jsSrc) return false;
   }
   var script=document.createElement("SCRIPT");
   script.language="javascript";
   script.id=jsName;
   script.src=jsSrc;
   script.defer=true;
   head.appendChild(script);
   return true;
  }

不过在js里导入另外一个js文件后 不能无法立即使用第二个js的变量,必须延迟执行脚本语句 :)

#13


meizz(梅花雪) 
Godknow(没钱吃饭。。。) 
能讲讲你们的framework的思路吗?我觉得“guyan999(深海) ”的方式应该解决不了我的问题。

#14


我觉得这个不是重要的问题,主要是因为javascript本身就是一种比较随意的语言,而且大多用于一些较小的范围,没有充分考虑重用问题,造成编码中不规范,容易造成命名冲突等等很多问题。
如果是你自己要用于比较复杂的应用,一开始就定好规范就可以较好的自己创作出一套方便的库来使用了。
你想一下如果没有上面提到的规范的建立,你随意的引入其他文件还是很危险的行为,毕竟在Html文件中引入js的时候都是在顶层框架中引入,所有js定义的全局变量等等都是通用的,你就是在js文件中引入js文件还是避免不了这个问题。
java可以通过import引入主要的还是系统提供的库部分,而不是随便的什么文件啊,其他脚本语言比如python等的文件引入也是要注意这样的问题的。
综述一下,就是你需要有完善的规范,我想这也是meizz(梅花雪)的javascript framework 的能够建立的基础。

#15


再回到楼主迫切的问题上,有了前文的理论基础,其实你在Html来引入多个js文件和js引入js就没有什么区别了。你完善了js框架后,需要使用某个文件就在html中引入,然后在后面的js文件中像本身内容一样接着使用就好了,当然,你其实在后面的使用中还是要注意名字空间等等问题的,也就是不能影响到原有框架(这个是起码的条件)。
对于框架的建立,其实可以仿照js默认框架,进行多层次的包装归类,比如实现算法的归于一类,实现接口的归于一类等等(这句仅仅是表达一个意思,你不会照着作吧!),然后起一个方便记忆,有唯一的名字来标识。
对于具体的应用,你选定一个好的命名规范基本上就够了。

#16


xdspower() 
多谢。
你所说的和我本来的基本思路差不多,但我有另一个原因导致有我现在的这种需求。
我现在忙,稍后再来发贴。
再次感谢。

#17


不错,xdspower 把原理讲得非常的透彻。写 framework 的目的就是为了模块化每一个JS脚本组件,动态载入,统一管理。我实现了 namespace 的模式,可以解决同名模块的冲突问题。至于guyan999(深海) 所说的不能“立即”使用载入的JS脚本问题我也已经解决了。可以给你一个片断:

<script src="ui/scripts/jsframework.js"></script>
<script src="ui/scripts/jsframework.js">/*<![CDATA[*/
Using("System.Web.UI.WebControls.MzTreeView");
var a = new MzTreeView();
a.dataSource={"-1_1": "text: CSDN社区起始点; JSData: communitytree.js"};
a.useCheckbox=true
document.write(a.render());
a.expandLevel(1);
/*]]>*/</script>

这就是我现在写的树控件在HTML网页里加载的所有代码。

#18


通过XMLHttpRequest传送js代码,真强啊!

#19


我的天呐,全看不懂,做个mark..

以后再来做.

#20


我的意思是这样:

javascript|
          |--utils|
          |       |--string.js
          |       |--number.js
          |       |--......
          |--controls|
          |          |--textbox.js
          |          |--listbox.js
          |          |......
          |--......

我建立了一个类似上面结构的js库,每个js文件中包含了相应的一组操作功能,比如listbox.js中包括了添加、删除、清空、移动各选项等功能,string.js包括了javascript没有提供了,但又是我自己所需要的一些字符串处理的功能。
但有时可能会需要在listbox.js中调用string.js的某一个函数功能(这只是一个举例),如果有了类似于java中的import的功能的话,那实现起来就方便多了,但问题是没有这项功能。

我这样算是说清楚了吗?

我是用.NET开发网站程序的,虽然有了这些js库,在<head></head>段中编写js时可以方便一些,但出于各方面考虑,不希望把代码写在<head></head>中,而希望能写在一个单独的js文件中然后在<head></head>段的<script ......></script>中调用,比如:

Login.aspx调用login.js
CheckUser.aspx调用checkuser.js

我个人认为,这也是系统模块文化的一种方式,虽然可能没这种必要,但在一个页面中,如果js代码很多的话(比如有个七八十行,甚至更多),那我觉得就很有用了。

但这样就造成我希望在login.js和checkuser.js中想调用string.js和number.js中的功能就不知道该怎么调用。

我想我应该是说清楚我的意图了,我自己考虑了很长时间,始终没有找到好的方法。因此在这里发出这个贴子,希望大家能讨论一下。

有空再来讨论。

#21


大家回答的就是你这种情况的解决方案,看来你没看懂老大们的回复。

#22


把js库的结构大概的样式再贴一下
javascript|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--utils|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--string.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--number.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--......
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--controls|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--textbox.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--listbox.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|......
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--......

#23


显示不对,再贴一遍,再不对也不贴了,希望大家能理解我的意思。
javascript|
     |--utils |
     |    |--string.js
     |    |--number.js
     |    |--......
     |--controls|
     |     |--textbox.js
     |     |--listbox.js
     |     |......
     |--......

#24


好,对了,就是这样类似的结构。

#25


meizz(梅花雪) 你能不能具体说说怎么解决的,或者给我看看具体的加载代码?
  我写了一个类似ZK的ajax框架,其中也包括了一套client的framework,但是在动态导入js上遇到问题,只好采取延迟加载的方式

#1


document.write('<script src="test.js"></scri' + 'pt>');

#2


没有现成的方法,可以自定规则做一套类似的方案。

#3


我最近也遇到这个问题,欢迎交流!QQ:17766922

#4


因为项目中用到的 js 较多, 就考虑写一个脚本库, 但脚本库中 js 文件多了以后, 可能就会存在互相引用的问题, 这个问题搞了很长时间了, 还是找不到方法解决.

#5


我写了一个 javascript framework ,从系统级解决了此类问题!

#6


动态加载JScript不是JavaScript完全可以实现。去看看prototype.js,会有启发的

#7


prototype.js 的强项不是载入管理JS代码,它只是给了你一些基础的脚本库和类继承方法罢了

#8


我写了一个 javascript framework ,从系统级解决了此类问题!
——————————————————————————————————

我也写了一个耶,meizz(梅花雪) 你什么时候发布啊?

#9


写JS的东西,现在感觉很提不起干劲。

............... :<

#10


prototype.js 是什么?请指教。

#11


我看见那颗钻石就眼馋,梅前辈!

#12


js的动态引用方法:
  
function(jsSrc){
   var head=document.getElementsByTagName("head")[0];
   var scripts=head.getElementsByTagName("SCRIPT");
   for(var i=0;i<scripts.length;i++){
   var src=scripts[i].src;
   if(src==jsSrc) return false;
   }
   var script=document.createElement("SCRIPT");
   script.language="javascript";
   script.id=jsName;
   script.src=jsSrc;
   script.defer=true;
   head.appendChild(script);
   return true;
  }

不过在js里导入另外一个js文件后 不能无法立即使用第二个js的变量,必须延迟执行脚本语句 :)

#13


meizz(梅花雪) 
Godknow(没钱吃饭。。。) 
能讲讲你们的framework的思路吗?我觉得“guyan999(深海) ”的方式应该解决不了我的问题。

#14


我觉得这个不是重要的问题,主要是因为javascript本身就是一种比较随意的语言,而且大多用于一些较小的范围,没有充分考虑重用问题,造成编码中不规范,容易造成命名冲突等等很多问题。
如果是你自己要用于比较复杂的应用,一开始就定好规范就可以较好的自己创作出一套方便的库来使用了。
你想一下如果没有上面提到的规范的建立,你随意的引入其他文件还是很危险的行为,毕竟在Html文件中引入js的时候都是在顶层框架中引入,所有js定义的全局变量等等都是通用的,你就是在js文件中引入js文件还是避免不了这个问题。
java可以通过import引入主要的还是系统提供的库部分,而不是随便的什么文件啊,其他脚本语言比如python等的文件引入也是要注意这样的问题的。
综述一下,就是你需要有完善的规范,我想这也是meizz(梅花雪)的javascript framework 的能够建立的基础。

#15


再回到楼主迫切的问题上,有了前文的理论基础,其实你在Html来引入多个js文件和js引入js就没有什么区别了。你完善了js框架后,需要使用某个文件就在html中引入,然后在后面的js文件中像本身内容一样接着使用就好了,当然,你其实在后面的使用中还是要注意名字空间等等问题的,也就是不能影响到原有框架(这个是起码的条件)。
对于框架的建立,其实可以仿照js默认框架,进行多层次的包装归类,比如实现算法的归于一类,实现接口的归于一类等等(这句仅仅是表达一个意思,你不会照着作吧!),然后起一个方便记忆,有唯一的名字来标识。
对于具体的应用,你选定一个好的命名规范基本上就够了。

#16


xdspower() 
多谢。
你所说的和我本来的基本思路差不多,但我有另一个原因导致有我现在的这种需求。
我现在忙,稍后再来发贴。
再次感谢。

#17


不错,xdspower 把原理讲得非常的透彻。写 framework 的目的就是为了模块化每一个JS脚本组件,动态载入,统一管理。我实现了 namespace 的模式,可以解决同名模块的冲突问题。至于guyan999(深海) 所说的不能“立即”使用载入的JS脚本问题我也已经解决了。可以给你一个片断:

<script src="ui/scripts/jsframework.js"></script>
<script src="ui/scripts/jsframework.js">/*<![CDATA[*/
Using("System.Web.UI.WebControls.MzTreeView");
var a = new MzTreeView();
a.dataSource={"-1_1": "text: CSDN社区起始点; JSData: communitytree.js"};
a.useCheckbox=true
document.write(a.render());
a.expandLevel(1);
/*]]>*/</script>

这就是我现在写的树控件在HTML网页里加载的所有代码。

#18


通过XMLHttpRequest传送js代码,真强啊!

#19


我的天呐,全看不懂,做个mark..

以后再来做.

#20


我的意思是这样:

javascript|
          |--utils|
          |       |--string.js
          |       |--number.js
          |       |--......
          |--controls|
          |          |--textbox.js
          |          |--listbox.js
          |          |......
          |--......

我建立了一个类似上面结构的js库,每个js文件中包含了相应的一组操作功能,比如listbox.js中包括了添加、删除、清空、移动各选项等功能,string.js包括了javascript没有提供了,但又是我自己所需要的一些字符串处理的功能。
但有时可能会需要在listbox.js中调用string.js的某一个函数功能(这只是一个举例),如果有了类似于java中的import的功能的话,那实现起来就方便多了,但问题是没有这项功能。

我这样算是说清楚了吗?

我是用.NET开发网站程序的,虽然有了这些js库,在<head></head>段中编写js时可以方便一些,但出于各方面考虑,不希望把代码写在<head></head>中,而希望能写在一个单独的js文件中然后在<head></head>段的<script ......></script>中调用,比如:

Login.aspx调用login.js
CheckUser.aspx调用checkuser.js

我个人认为,这也是系统模块文化的一种方式,虽然可能没这种必要,但在一个页面中,如果js代码很多的话(比如有个七八十行,甚至更多),那我觉得就很有用了。

但这样就造成我希望在login.js和checkuser.js中想调用string.js和number.js中的功能就不知道该怎么调用。

我想我应该是说清楚我的意图了,我自己考虑了很长时间,始终没有找到好的方法。因此在这里发出这个贴子,希望大家能讨论一下。

有空再来讨论。

#21


大家回答的就是你这种情况的解决方案,看来你没看懂老大们的回复。

#22


把js库的结构大概的样式再贴一下
javascript|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--utils|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--string.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--number.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--......
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--controls|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--textbox.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--listbox.js
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|......
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|--......

#23


显示不对,再贴一遍,再不对也不贴了,希望大家能理解我的意思。
javascript|
     |--utils |
     |    |--string.js
     |    |--number.js
     |    |--......
     |--controls|
     |     |--textbox.js
     |     |--listbox.js
     |     |......
     |--......

#24


好,对了,就是这样类似的结构。

#25


meizz(梅花雪) 你能不能具体说说怎么解决的,或者给我看看具体的加载代码?
  我写了一个类似ZK的ajax框架,其中也包括了一套client的framework,但是在动态导入js上遇到问题,只好采取延迟加载的方式