zepto源碼學習(1)

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的各類方法了。粗略的流程能夠概括爲:

  • 調用$函數

  • 根據傳入的參數生成對象。

  • 重置對象的原型,使之擁有一系列方法

相關文章
相關標籤/搜索