zepto源码--extend--学习笔记

对象继承函数: $.extend(){},默认传递一个参数,需要继承的对象目标。函数展示:

最终实现的过程,需要调用工具函数extend,首先分析extend函数。

默认传递三个参数,继承的目标对象-target,继承的源对象-source,是否为深拷贝-deep

遍历源对象,分两种情况:

1、浅拷贝:只要source[key]有值,就将其值赋值给target对应的key,即target[key];

2、深拷贝:就是如果源对象的属性值,也是对象或者数组,则进行同样的拷贝操作。以对象为例:{'name': 'zhuhuoxingguang', 'age': 26, 'brother': ['jiuwan', 'hao', 'xu']},完完全全复制该对象,即为深拷贝。也分为两种可能:主要目的是为了确定对应的target[key]应当赋值什么类型。

  a). 如果是数组,则将对应的target[key] 赋值空数组[]

  b). 如果是对象,则将对应的target[key] 赋值空对象{}

  最后,递归调用函数自身extend(target[key], source[key], deep)实现真正的深拷贝。

现在再来看对外暴露的真实的继承函数$.extend,为了不强制用户传递不必要的参数,设置默认参数只有target,如果用户传递了其他参数,则通过arguments获取,以及拆分。

定义变量deep, 获取用户传入的其他参数。

如果用户传入的第一个参数是个布尔值,则表明用户想进行深拷贝或者浅拷贝

则将参数target值赋值给deep,目标对象则为剩余参数当中的第一个,通过获取args的第一个值表示target

args已经转换为数组形式,所以通过数组方法shift()获取args中的第一个值。

为避免用户输入多个源对象进行拷贝,即用户传入了类似$.extend(true, {}, {}, {}, ...)的参数,所以需要对args进行遍历,对每一个源对象调用前文讲解的extend方法。

最后将复制结果target返回

 

 

 

 

  

转载于:https://www.cnblogs.com/zhuhuoxingguang/p/6021855.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值