源码地址https://github.com/manlili/zepto-source-analysis里面的introduction.html
Zepto原理说明
先来看一段代码
这个时候再打开console控制台输入
这个时候发现上面两个输出的都是数组,下面再来一段代码
会发现浏览器html中所有P标签都加了类名test,但是数组没有内置的addClass方法,这就是我们《zepto源码解读1之引言》提到的扩展隐式原型来实现的。
如果此时我想创建一个新的对象,他调用原生数组的内置对象concat和push,同时又自定义addClass方法,只需要
这个时候再打开console控制台输入
经测试上面的代码都是正确的。
实际上zepto.js设计的时候,并不像上面的那么简单,但是原理都是一致的
紧接着上面的attr创建新方法addClass,这里需要注意的是,实际上addClass方法只在attr上面起作用,假设我们再创建一个
这个时候的attr2依然没有addClass方法,如果想让attr2也有的话,就需要用
上面attr.__proto__.constructor
是Array,也就是直接扩展了Array,这也是我们扩展插件的主要思想
Zepto架构设计
下来看一段代码
关于自执行函数建议看我的另外一篇博客立即执行函数IIFE
上面代码最难理解的是
解释起来就是如果window.$还没有被定义,就将Zepto赋值给window
细心的人就会发现,立即执行函数里面没有return,下面来看下稍微完整点的代码
这个时候再打开console控制台输入和结果是
由上面的代码可以看出window.$也就是Zepto最终是个函数