zoukankan      html  css  js  c++  java
  • 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返回

      

  • 相关阅读:
    OpenStack功能简介
    Openstack(七)keystone
    Openstack(六)RabbitMQ集群
    Openstack(五)Memcache- repcached集群
    Openstack(四)Mysql主从
    Openstack(三)Haproxy+Keepalived双机
    Openstack(二)基本环境准备--网络、时间、yum源等
    Openstack架构简介(一)
    运维监控系统之Open-Falcon
    python高级之Flask框架
  • 原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/6021855.html
Copyright © 2011-2022 走看看