hzwinner 2019-06-21
本次主要分享关于上一篇区域2的学习。
区域2为Zepto的核心部分,它的结构如下
var Zepto = (function() { var $, zepto = {}; function Z(dom, selector) {} zepto.Z = function(dom, selector) { return new Z(dom, selector) } zepto.isZ = function(object) { return object instanceof zepto.Z } zepto.init = function(selector, context) { blablabla... return zepto.Z(dom, selector); } $ = function(selector, context) { return zepto.init(selector, context) } zepto.qsa = function(element, selector) { blablabla... }); $.fn = { blablabla... }; zepto.Z.prototype = Z.prototype = $.fn; $.zepto = zepto; });
为了便于梳理思路,以上代码省略了细节,只保留了轮廓脉络。
这段代码首先定义了两个变量$和zepto,一个类Z;然后给空对象zepto定义属性和方法,其中zepto.Z得到类Z的一个实例,至于zepto.init,从默认执行return zepto.Z(dom, selector)可以得知,它也是获得类Z的实例,只是有可能因为参数不同作不同处理,在深入细节之前姑且这么理解;$是一个函数,返回值为zepto.init(),亦即类Z的实例;zepto.Z.prototype = Z.prototype = $.fn是为创建的类Z的实例设置原型属性,同时为类Z设置原型属性;$.zepto = zepto则是将以上各种处理得到的对象zepto悬挂到$上作为属性zepto。
最终暴露给开发者的$.zepto如下图所示:
这里只分析了区域2的结构,下一次会深入到函数语句粒度。