Zepto源碼分析之二(新舊版本zepto.Z方法的區別)

在上一節中講到Z()方法,是在初始化函數init中直接調用zepto.Z()數組

1 zepto.Z = function(dom, selector) {
2     dom = dom || []
3     dom.selector = selector || '';
4     // 隱式原型上賦值,低版本IE不支持,但zepto主要用於移動端,不存在低版本IE的狀況
5     dom.__proto__ = $.fn;
6     return dom;  // 返回的是一個純數組
7 };
1 zepto.Z.prototype = $.fn

 

舊版中,直接將$.fn對象掛載dom對象的隱式原型上,而在新版zepto1.2.0中結構以下:dom

1 zepto.Z = function (dom, selector) {
2       return new Z(dom, selector)
3 }
1 function Z(dom, selector) {
2      var i, len = dom ? dom.length : 0
3      for (i = 0; i < len; i++) this[i] = dom[i]
4      this.length = len
5      this.selector = selector || ''
6 }
1 zepto.Z.prototype = Z.prototype = $.fn

1 . 首先 初始化後調用zepto.Z方法時,返回的是new Z()構造函數函數

2 . 在構造函數體內可遍歷dom節點對象,使用this[i]=dom[i]返回對象數組形式this

3 . 而後將$.fn對象賦給Z.prtotype原型對象上,而Z.prototype的原型對象又等於 new Z().__proto__,這又回到了舊版中的dom.__proto__ = $.fnspa

相關文章
相關標籤/搜索