zepto版本爲1.0。
這一章來看看入口是怎麼實現的。html
咱們通常是這樣用的:$("#test"),在196行,zepto定義了函數$:數組
$ = function(selector, context){ return zepto.init(selector, context) }
這裏的init方法作了些什麼呢?在160行,能夠看到,這裏是根據不一樣參數返回不一樣的對象:dom
什麼都沒有傳入,返回一個空的zepto對象函數
若是是一個函數,那麼執行dom readyprototype
若是已是一個zepto對象,直接返回code
若是是window,document,實際上也是直接返回htm
若是是一個html片斷,那麼生成節點對象
若是上述狀況都不是,那麼就用選擇器document.querySelectorAll獲取dom對象zepto
而後將獲得的對象傳入zepto.Z,來到143-148行:原型
zepto.Z = function(dom, selector) { dom = dom || [] dom.__proto__ = arguments.callee.prototype dom.selector = selector || '' return dom }
這裏是入口最關鍵的步驟之一。實際上,zepto內部維護的的對象是一個類數組對象(這裏的dom)。而後用zepto.Z的原型覆蓋了此類數組的的原型。那麼zepto.Z的原型又是什麼呢?咱們跳到第608行:
zepto.Z.prototype = $.fn
那麼$.fn是什麼呢?再看278-550行:
$.fn = { //各類方法 }
所以,zepto.Z返回的類數組對象就有了$.fn的各類方法了。粗略的流程能夠概括爲:
調用$函數
根據傳入的參數生成對象。
重置對象的原型,使之擁有一系列方法