我正在开发一个包含多个功能的项目,因此我尝试将每个功能组织在一个单独的 JavaScript 文件中,以便可以按需加载代码。我想标准化加载和执行过程,所以我正在尝试开发一个函数,如果它不存在于内存中,则可以加载和执行 JavaScript 文件,或者如果它已经加载,则只执行它。一种方法是让函数需要两个参数,文件名和入口点函数的名称,然后检查脚本是否已经加载,是否只是执行入口点函数,或者不是,然后加载脚本并在 onload 事件时执行入口点函数,这种方法工作正常,但它需要主模块知道所有入口点函数名称,这在未来可能会成为一个令人头疼的问题,因为粗心的程序员可能会无意中重复一个函数名。一种更清洁、更安全的方法是将所有入口点函数命名为“main”,并在第一次执行时将该“main”关联到它的脚本 DOM 对象......或多或少像这样:
加载模块:
function(){
function main(){
.
. some code here
.
}
Install(getThisFileName(),main);
}();
主要模块:
function Load(fn){
var el,ff,i
el = document.getElementsByTagName("script");
ff = "http://"+window.location.host+fn;
for(i=el.length-1;i>=0;i--){
if(el[i] && el[i].src==ff){
el[i].Main();
return;
}
}
el = document.createElement("script");
el.type = "text/javascript";
el.src = ff;
}
function Install(ff,ep){
var el,i;
el = document.getElementsByTagName("script");
for(i=el.length-1;i>=0;i--){
if(el[i] && el[i].src==ff){
el[i].Main = ep;
ep();
return;
}
}
}
但为了做到这一点,我需要知道正在执行的 JavaScript 文件的名称,我什至不知道这是否可能。有任何想法吗?