定义layer对象:css
var layer = {...}api
layer对象 初始化函数,像UEditor等开源js也是这样的方式,初始化完成以后执行回调。数组
其中第二个参数就是回调函数。框架
ready: function(path, fn){函数
//断定第一个参数是否是函数,若是是的话将它赋值给函数fnoop
//这觉得着咱们调用该函数时能够不用设置paththis
var type = typeof path === 'function';spa
if(type) fn = path;对象
//$.extend()这个函数比较常见,用于合并属性事件
//ready.config中的ready是一个定义好的对象,主要是存储layer的配置:包含js脚本路径,事件屏蔽,配置config,默认 按钮数组,layer弹出层的类型数组。
layer.config($.extend(ready.config, function(){
return type ? {} : {path: path};
}()), fn);
return this;
//return type ? {} : {path: path}; 这行代码 说明ready这个函数仅仅有入参的时候,设定{}空对象跟默认配置合并,不然将传进来的参数path,定义{path: path},与默认配置合并
接着是下一个函数layer.config();解析,在项目主页的文档中,标注出来的api是layer.config(options) - 初始化全局配置
少了一个参数fn,fn是回调函数,回调函数是给ready(框架准备完毕)的时候调用的,由于ready里面调用了layer.config()进行设定path,因此官方文档里面有一句说明:可是若是你已经经过layer.config配置了path,你在使用layer.ready时,是不须要path的。
config: function(options, fn){
var item = 0;
//下面这行代码的写法很广泛,意思是 options 不存在时,就设定一个空的对象{};不少框架都这样写
options = options || {};
//这段话就是options和默认配置合并
layer.cache = ready.config = $.extend(ready.config, options);
//在配置信息合并完毕以后若是ready.config.path不存在,则执行layerd对象的path函数,它的实现是 ready.getPath 经过 ready对象的getPath 方法得到。
//因此说若是咱们不设定js文件的路径时会经过ready.getPath得到默认路径,就是layerjs这个框架所在的目录。
layer.path = ready.config.path || layer.path;
//这句话意思是 假如options.extend是一个字符串的话,执行options.extend = [options.extend],将
options.extend 设定为一个数组,而且将options.extend(options设定为数组前)这个字符串做为数组的其中一个值
//这种的写法代码量少,不过可能须要细心读
typeof options.extend === 'string' && (options.extend = [options.extend]);
// layer.use是layer对象内置方法,用于加载配件,该函数 use: function(module, fn, readyMethod),第一个参数是模块名,第二个参数是执行函数,第三个函数是回调函数。
//加载配件相关的配置
//经过layer.use()函数源码 document.createElement(iscss ? 'link' : 'script');能够看到是加载css或者js,
layer.use('skin/layer.css', (options.extend && options.extend.length > 0) ? (function loop(){
var ext = options.extend;
layer.use(ext[ext[item] ? item : item-1], item < ext.length ? function(){
++item;
return loop;
}() : fn);
}()) : fn);
return this;
}
//下面这种函数写法是当即执行的意思,layer.js的开头就是这行代码
;(function poll() { }());