定義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() { }());