;(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 對象插入到現在操作的對象之中。