在上一节中讲到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中结构如下:
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]返回对象数组形式
3 . 然后将$.fn对象赋给Z.prtotype原型对象上,而Z.prototype的原型对象又等于 new Z().__proto__,这又回到了旧版中的dom.__proto__ = $.fn