在上一節中講到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