周梦康 发表于 2014-07-25 3452 次浏览 标签 : ThinkSNS

一句话小结:js文件通过$.getScript()方法来加载,css文件通过append()方法来追加到dom中。

在JS里面function也可以是构造函数,也可以是“类”,这一点有点坑爹,但是它就是如此设计的,所以我也得这样去理解。下面的_core就是设计为了一个类。你会看到它在类里面声明了_coreLoadFile的方法,在这个方法里面做文件的加载,通过temp这个数组来存放已经载入过的文件地址,以防重复请求。如果把_core理解为“函数”的话,在多次调用该函数的时候,里面的temp变量怎么能够存储该进程中之前调用过的文件地址呢,它又不像phpstatic变量?实际呢,这里是把_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;
	};
}

评论列表