Zepto源碼之stack模塊

;(function($){
  $.fn.end = function(){
    return this.prevObject || $()
  }

  $.fn.andSelf = function(){
    return this.add(this.prevObject || $())
  }

  'filter,add,not,eq,first,last,find,closest,parents,parent,children,siblings'.split(',').forEach(function(property){
    var fn = $.fn[property]
    $.fn[property] = function(){
      var ret = fn.apply(this, arguments)
      ret.prevObject = this
      return ret
    }
  })
})(Zepto)

從源碼裏我們可以看出來, stack 模塊主要就是改寫了 filter, add, not, eq, first, last, find, closest, parents, parent, children, siblings 等方法。因爲我們之前看過這些方法的源碼,我們可以知道,這些方法都是返回了一個新的 zepto 對象。那麼之前操作的對象則會丟棄,此模塊就是爲了應對這種操作而設計的,把之前操作的 zepto 對象放入了 prevObject 對象中。形式了一個類似於原型的模型,我們可以一層一層的查詢,找到每一次操作的對象。

其中 還添加了兩個方法 end, andSelf 方法。簡單的分析其源碼就是返回上一個操作的 zepto 對象與將之前操作的 zepto 對象插入到現在操作的對象之中。

發佈了88 篇原創文章 · 獲贊 41 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章