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中结构如下:

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

原文地址:https://www.cnblogs.com/hughes5135/p/10496143.html