zepto设计和源码分析(推荐)

课程地址:https://www.imooc.com/learn/745

一、简单介绍

121811_oArm_3018050.png

122150_Lqfn_3018050.png

122945_okIl_3018050.png

123034_5o61_3018050.png

130447_vkfg_3018050.png

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" http-equiv="X-UA-Compatible" content="IE=edge,width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable = 0">
    <title>zepto</title>
    <style>
        .blue{color:blue;}
    </style>
    <script src="https://cdn.bootcss.com/zepto/1.1.6/zepto.js"></script>
</head>
<body>
    <p id="p1">测试</p>
    <div>
        <span>test</span>
        <span>test</span>
        <span>test</span>
    </div>
    <script >
        var $p1 = $('#p1')
        var $span = $('span')
        console.log($p1);
        console.log($span);
    </script>
</body>
</html>

130451_haO9_3018050.png

130456_xlsE_3018050.png

 

130500_xzai_3018050.png

130514_qwQa_3018050.png

130520_H4nx_3018050.png

130525_CzHW_3018050.png

130721_sYkm_3018050.png

arr.__proto__.addClass = function(){alert(456)}

131001_pkRT_3018050.png

131034_7V4q_3018050.png

二、js原型基础

131125_hbQP_3018050.png

131206_ojag_3018050.png

131332_VnmB_3018050.png

131404_V7KY_3018050.png

131422_UzKf_3018050.png

constructor是指向这个对象本身

131552_D4hG_3018050.png

131628_QfXe_3018050.png

131707_Zm2v_3018050.png

131758_h9GL_3018050.png

131808_PI9Y_3018050.png

131950_lLAE_3018050.png

这两种写法完全一样

132129_5RCP_3018050.png

132213_UKDZ_3018050.png

写法等价

132310_a7N8_3018050.png

132319_PjbU_3018050.png

132339_PvXs_3018050.png

数组:

132443_AVtW_3018050.png

132533_HPv7_3018050.png

132650_DGEt_3018050.png

132840_kP6l_3018050.png

132853_hWJ5_3018050.png

132931_eK4P_3018050.png

132940_kNVN_3018050.png

132949_NKD4_3018050.png

132957_jSwf_3018050.png

133015_mNRp_3018050.png

整理:

//第一句话----------------每个函数都有一个prototype属性
var fn = function(){}
fn.prototype
fn === fn.prototype.constructor

//第二句话----------------所有通过函数new出来的东西,这个东西都有一个__proto__指向这个函数的prototype
//空函数
var fn = new Function()
fn.__proto__
fn === arr.prototype.constructor//true

//数组
var arr = []//等同下面一行的写法
var arr = new Array()//写法2,等同上一行
arr.__proto__
arr === arr.prototype.constructor//true

//对象
var a = {}//等同下面一行的写法
var a = new Object()//写法2,等同上一行
a.__proto__
a === arr.prototype.constructor//true


//第三句话----------------当你想要使用一个对象(或者一个数组)的某个功能时:如果该对象本身具有这个功能,则直接使用;如果该对象本身没有这个功能,则去__proto__中找

//举例
arr.push(1)
arr//[1]
arr.__proto__.addClass= function(){alert(111)}//数组没有addClass方法,在__proto__自定义添加
arr1.addClass()//执行,结果是弹出111的对话框



//----------------原理:原型对象
Array
Array.prototype
Object
Object.prototype
Function
Function.prototype

//等价写法
[].concat === Array.prototype.concat;//true
arr.__proto__ === Array.prototype;//true

三、源码分析

3.1分析结构

133354_WfV6_3018050.png

133428_0ITY_3018050.png

133525_9ufp_3018050.png

var arr = [1,2,3]
arr.__proto__ ={
    addCLass:function(){
        console.log('this is addClass')
    },
    concat:Array.prototype.concat,
    push:Array.prototype.push
}

//验证
var $p = $('p');
// 使用constructor验证
arr.__proto__.constructor === $p.__proto__.constructor//true

// 使用instanceof验证
console.log($p instanceof Array);//false
console.log(arr instanceof Array);//false

133915_seB9_3018050.png

插件机制

134136_9GC5_3018050.png

134219_f4v9_3018050.png

134245_7Fgz_3018050.png

双斜线支持http,https,需要cdn支持

134342_MaSe_3018050.png

之上是core模块的内容

134458_v8lX_3018050.png

134742_si3d_3018050.png

134809_0wLc_3018050.png

134839_RA5r_3018050.png

134910_Jwth_3018050.png

3.2分析inint函数

135144_AHY6_3018050.png

135218_nGL7_3018050.png

135313_GgUU_3018050.png

135340_Zupb_3018050.png

135330_00uk_3018050.png

135430_XOQL_3018050.png

135450_ZdAQ_3018050.png

135517_wVJg_3018050.png

视频附加信息链接:http://www.kancloud.cn/wangfupeng/zepto-design-srouce/173680

135823_R0jC_3018050.png

140000_kBGY_3018050.png

140123_TTBR_3018050.png

qsa

140134_8EP8_3018050.png

返回数组

140213_9gWp_3018050.png

140158_jZNk_3018050.png

返回函数

140334_NW0J_3018050.png

140314_zDX6_3018050.png

140427_nX4P_3018050.png

140416_nhZE_3018050.png

140602_mlai_3018050.png

3.3 Z函数

140650_zotd_3018050.png

140701_UFUX_3018050.png

140735_hJ0g_3018050.png

空数组

141031_WcDX_3018050.png

141130_iec2_3018050.png

141222_8nD3_3018050.png

141458_2Krd_3018050.png

IE低版本不支持

3.4对比新旧zpeto的版本

141537_C6hQ_3018050.png

141856_mx2c_3018050.png

142130_0Jdm_3018050.png

142227_3ioF_3018050.png

四、总结

142345_nnsL_3018050.png

142557_KqmM_3018050.png

142645_ogXv_3018050.png

142759_6nI1_3018050.png
142817_3w3j_3018050.png

 

转载于:https://my.oschina.net/u/3018050/blog/1790725

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值