zoukankan      html  css  js  c++  java
  • $.extend

    通过源对象扩展目标对象的属性,源对象属性将覆盖目标对象属性。

    默认情况下为,复制为浅复制。如果第一个参数为true表示深度复制

    $.extend的源码详解

     1 $.extend = function (target) {
     2     var deep, args = slice.call(arguments, 1)//对传递不确定的参数进行截取,截取掉第一个,默认第一个参数用来判断是浅复制还是深复制,(false是默认为浅复制,true是深复制) (slice.call  http://www.cnblogs.com/sunnie-cc/p/6797786.html
     3     if (typeof target == 'boolean') {//判断是否有要深复制
     4         deep = target
     5         target = args.shift()//args移除数组的第一个,会将第一个(目标元素)返回赋值给target
     6     }
     7     args.forEach(function (arg) {
     8         extend(target, arg, deep)
     9     })
    10     return target
    11 }
    12 
    13 function extend(target, source, deep) {
    14     for (key in source)//一条语句(以;结束的)时,可以不用打{ }
    15         if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {//是引用类型(object、array)的值就深复制 (引用、值类型 http://www.cnblogs.com/sunnie-cc/p/6801331.html
    16             if (isPlainObject(source[key]) && !isPlainObject(target[key]))
    17                 target[key] = {}//原是一个Object,如果目标元素不是则设置为Object;
    18             if (isArray(source[key]) && !isArray(target[key]))
    19                 target[key] = []//原是一个Array,如果目标元素不是则设置为Array;
    20             extend(target[key], source[key], deep)//实现一个递归的去调用extend
    21         }
    22         else if (source[key] !== undefined) target[key] = source[key]//浅复制(如果是值类型复制是不可改变的),
    23     // 因为target是数组也就是应用类型,如有改变,传进的参数target对应的值也会改变(eg:在 extend(target, arg, deep)中的target会变)
    24 }
  • 相关阅读:
    01 Vue的起步和插值表达式
    06 扩展的对象的功能
    05 解构赋值
    04 函数之扩展运算符、箭头函数
    03 函数之默认值、剩余参数
    02 模板字符串
    01 let和const命令
    28 Bootstrap排版
    27 Bootstrap的列偏移
    26 Bootstrap的栅格系统
  • 原文地址:https://www.cnblogs.com/sunnie-cc/p/6797977.html
Copyright © 2011-2022 走看看