zeptojs库解读1之整体框架
首先看的是整体框架,
// zepto骨骼,这个函数的作用使得Zepto(slector, context)使用很多$.fn里面的方法
var Zepto = (function(){
// zepto是一个命名空间
var $, zepto = {} // 这是一个工厂方法,返回一个数组
zepto.Z = function(dom, selector) {
dom = dom || []
// 不知道__proto__和prototype的区别了吧,一个是对象的,另一个是方法的。new出来的对象的__proto__和构造函数的prototype一致
dom.__proto__ = $.fn //通过给dom设置__proto__属性指向$.fn来达到继承$.fn上所有方法的目的
dom.selector = selector || ''
return dom
} // zepto.init方法也只是zepto.Z的一个马甲
zepto.init = function(selector, context){
var dom
return zepto.Z(dom, selector)
} // $是一个方法,是zepto.init方法的马甲
$ = function(selector, context) {
return zepto.init(selector, context)
} // $.fn包含了一大堆方法
$.fn = {} // zepto.Z方法new出来的对象继承了$.fn里面的一大堆方法。从前面看到zepto.Z方法里面有dom.__proto__ = $.fn,这就意味着zepto.Z工厂函数造出来的对象 instanceOf zepto.Z为true
zepto.Z.prototype = $.fn $.zepto = zepto return $
})() window.Zepto = Zepto
'$' in window || (window.$ = Zepto) // 事件处理
;(function($){ })(Zepto) // Ajax处理
;(function($){ })(Zepto) // CSS3动画
;(function($, undefined){ })(Zepto)
基本上这类DOM库的骨骼构造思想是,分隔初始化构造器函数,与原型对象的作用域,又能够在返回实例中访问原型对象。
在这里,zeptojs和jquery的做法有点不同,zeptojs是运用工厂模式生成带一大堆方法的对象来搞,jquery则是构造函数更改原形链来搞。
var $ =jQuery = function(){
return new jQuery.fn.init();
}
jQuery.fn = jQuery.prototype = {
init : function(){
this.length = 0;
this.test = function(){
return this.length;
}
return this;
},
jquery: "1.3.2",
length: 1,
size: function() {
return this.length;
}
}
jQuery.fn.init.prototype = jQuery.fn; //使用jQuery的原型对象覆盖init的原型对象
alert( $().jquery ); //返回"1.3.2"
alert( $().test() ); //返回0
alert( $().size() ); //返回0
这两种方式,谁优谁劣呢,私以为zeptojs。
zeptojs库解读1之整体框架的更多相关文章
- zeptojs库解读3之ajax模块
对于ajax,三步骤,第一,创建xhr对象:第二,发送请求:第三,处理响应. 但在编写过程中,实际中会碰到以下问题, 1.超时 2.跨域 3.后退 解决方法: 1.超时 设置定时器,规定的时间内未返回 ...
- zeptojs库解读2之事件模块
第一,通过obj.addEventListener("click",fn)绑定的事件,你不能通过obj.onclick = null;来移除绑定点击事件的所有回调函数. 所以引入第 ...
- iOS学习——iOS 整体框架及类继承框架图
整理自:IOS 整体框架类图值得收藏 一 整体框架 在iOS开发过程中,对iOS的整理框架的了解和学习是必不可少的一个环节,今天我们就好好来了解一下iOS的整体框架.首先贴一个关于iOS的框架介绍:i ...
- Duilib源码分析(一)整体框架
Duilib界面库是一款由杭州月牙儿网络技术有限公司开发的界面开源库,以viksoe项目下的UiLib库的基础上开发(此后也将对UiLib库进行源码分析):通过XML布局界面,将用户界面和处理逻辑彻底 ...
- 初识cocos2d-x-从环境配置到整体框架
前言 ACM生涯在带着些许遗憾中结束了.春招的时候找了一份游戏开发的工作,现在学习cocos2dx中. 从ACM竞赛到实际项目开发的学习,第一感觉就是不适应,虽然感觉实际项目的确要比ACM简单的多.最 ...
- jQuery源码分析之整体框架
之前只是知道jQuery怎么使用,但是我觉得有必要认真的阅读一下这个库,在分析jQuery源码之前,很有必要对整个jQuery有个整体的框架概念,才能方便后面对jQuery源码的分析和学习,以下是我总 ...
- Java集合系列:-----------01集合的整体框架
内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...
- [c#]asp.net开发微信公众平台(7)前6篇的整体框架demo源码
这里给出的demo是具备整体框架的微信公众平台源码, 所谓demo就是拿过去就可以直接演示使用的东西, 当然不会具备非常详细的具体到业务层面.数据层面的东西, 每个人都可以在此基础上自由发挥, 只 ...
- 关系型数据库工作原理-数据库整体框架(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...
随机推荐
- centos6.8上安装paramiko
author : headsen chen date: 2018-10-07 17:06:07 # 安装gcc,python-devel yum -y install python-devel ...
- oracle的connect by level的示例
SELECT regexp_substr('CITY_AA,CITY_BB,CITY_CC,CITY_DD', '[^,]+', 1, LEVEL) t FROM dualCONNECT BY reg ...
- 微信小程序 --- if/else条件渲染
if 条件渲染:当为真的时候显示,当为假的时候隐藏: else 条件渲染:当为真的时候隐藏,当为假的时候显示: <view wx:if="{{true}}">{{tex ...
- Dcloud开发-- 打开蓝牙
这样打开APP就会直接提示是否要打开蓝牙: <script type="text/javascript"> mui.init(); mui.plusReady(func ...
- MySQL中EXPLAIN解释命令(转载)
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...
- jq简单城市二级联动实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Tensorflow 实战Google深度学习框架 第五章 5.2.1Minister数字识别 源代码
import os import tab import tensorflow as tf print "tensorflow 5.2 " from tensorflow.examp ...
- redis cluster 集群畅谈(二)
上一篇http://www.cnblogs.com/qinyujie/p/9029482.html, 主要讲解 redis cluster 集群 搭建,本篇主要讲解实验多master写入.读写分离.实 ...
- wsdl客户端代码生成的方法
在jdk的bin目录下有一个wsimport.exe的工具,使用该工具命令生产java客户端代码: 命令如下: wsimport -keep -d d:\ -s d:\src -p com.map ...
- Java中内部类揭秘(一):外部类与非静态内部类的”相互可见性“
声明:本博客为原创博客.未经同意,不得转载.原文链接为 http://blog.csdn.net/bettarwang/article/details/27012421. ...