本次主要分享關於上一篇區域2的學習。
區域2爲Zepto的核心部分,它的結構以下dom
var Zepto = (function() { var $, zepto = {}; function Z(dom, selector) {} zepto.Z = function(dom, selector) { return new Z(dom, selector) } zepto.isZ = function(object) { return object instanceof zepto.Z } zepto.init = function(selector, context) { blablabla... return zepto.Z(dom, selector); } $ = function(selector, context) { return zepto.init(selector, context) } zepto.qsa = function(element, selector) { blablabla... }); $.fn = { blablabla... }; zepto.Z.prototype = Z.prototype = $.fn; $.zepto = zepto; });
爲了便於梳理思路,以上代碼省略了細節,只保留了輪廓脈絡。
這段代碼首先定義了兩個變量$和zepto,一個類Z;而後給空對象zepto定義屬性和方法,其中zepto.Z獲得類Z的一個實例,至於zepto.init,從默認執行return zepto.Z(dom, selector)能夠得知,它也是得到類Z的實例,只是有可能由於參數不一樣做不一樣處理,在深刻細節以前姑且這麼理解;$是一個函數,返回值爲zepto.init(),亦即類Z的實例;zepto.Z.prototype = Z.prototype = $.fn是爲建立的類Z的實例設置原型屬性,同時爲類Z設置原型屬性;$.zepto = zepto則是將以上各類處理獲得的對象zepto懸掛到$上做爲屬性zepto。
最終暴露給開發者的$.zepto以下圖所示:函數
這裏只分析了區域2的結構,下一次會深刻到函數語句粒度。學習