一句话小结:js
文件通过$.getScript()
方法来加载,css
文件通过append()
方法来追加到dom
中。
在JS里面
function
也可以是构造函数,也可以是“类”,这一点有点坑爹,但是它就是如此设计的,所以我也得这样去理解。下面的_core
就是设计为了一个类。你会看到它在类里面声明了_coreLoadFile
的方法,在这个方法里面做文件的加载,通过temp
这个数组来存放已经载入过的文件地址,以防重复请求。如果把_core
理解为“函数”的话,在多次调用该函数的时候,里面的temp
变量怎么能够存储该进程中之前调用过的文件地址呢,它又不像php
的static
变量?实际呢,这里是把_core
作为了一个类,那么只要实例化这个类var core = new _core()
,之后在同一个进程里面调用的文件就能够“持续”地以追加的方式存入temp
这个变量了。自己的一点理解,不知道对不对。
var _core = function() { // 核心通用的加载源函数 var obj = this; // 加载文件方法 this._coreLoadFile = function() { var temp = new Array(); var tempMethod = function(url, callback) { // 第二次调用的时候就不=0了 var flag = 0; for(i in temp) { if(temp[i] == url) { flag = 1; } } if(flag == 0) { // 未载入过 temp[temp.length] = url; // JQuery的ajax载入文件方式,如果有样式文件,同理在此引入相关样式文件 $.getScript(url, function() { if("undefined" != typeof(callback)) { if("function" == typeof(callback)) { callback(); } else { eval(callback); } } }); } else { if("undefined" != typeof(callback)) { // 利用setTimeout 避免未定义错误 setTimeout(callback, 200); } } }; // 返回内部包函数,供外部调用并可以更改temp的值 return tempMethod; }; // 加载CSS文件 this._loadCss = function() { var temp = new Array(); var tempMethod = function(url) { // 第二次调用的时候就不=0了 var flag = 0; for(i in temp) { if(temp[i] == url) { flag = 1; } } if(flag == 0) { // 未载入过 temp[temp.length] = url; var css = '<link href="'+THEME_URL+'/js/tbox/box.css" rel="stylesheet" type="text/css">'; $('head').append(css); } }; // 返回内部包函数,供外部调用并可以更改temp的值 return tempMethod; }; }