• Jquery extend() 方法


    Jquery 中$.extend() 方法用于实现合并多个对象的属性到第一个对象中。

    $.extend(object1, [object2] );  

    将后两个对象即object1和object2中的属性合并到object1中,默认是合并覆盖操作,不进行迭代。

    此时object1 对object2 的拷贝为浅拷贝(公用一份实体,仅仅是引用变量不同)

    <script type="text/javascript">
      obj1 = {a: "this is a", b: "this is b"};
    
      obj2 = {
              a: {a_c: "this is a_c", a_d: "this is a_d"},
              c: "this is c", 
              }
    
      $.extend(obj1, obj2);
      console.log(obj1.a);
      // 输出 Object {a_c: "this is a_c", a_d: "this is a_d"} 
      // 覆盖了object1 中的a对象
    
      console.log(obj1.a.a_c)         // 输出 this is a_c
      obj2.a.a_c = "this is A_C";     // 改变obj2中a.a_c的值
      console.log(obj1.a.a_c);        // 输出 this is A_C
    </script>

    对于浅拷贝的简单实现

    $ = {
         extend : function(target, options) {
            for (name in options) {
                target[name] = options[name];
            }
            return target;
        }
    };

    若要进行合并迭代操作,则设置第一个参数为true,此时的拷贝为深拷贝(源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响)

    $.extend(true, object1, [object2] );

    <script type="text/javascript">
      obj1 = {a: {a_a: "this is a_a"}, b: "this is b"};
    
      obj2 = {
              a: {a_c: "this is a_c", a_d: "this is a_d"},
              c: "this is c", 
              }
    
      $.extend(true, obj1, obj2);
      console.log(obj1.a); 
      // 输出 Object {a_a: "this is a_a", a_c: "this is a_c", a_d: "this is a_d"} 
      // 合并并迭代了object1中的a对象,不仅仅是覆盖
    
      console.log(obj1.a.a_c);        // 输出 this is a_c
      obj2.a.a_c = "this is A_C";     // 改变obj2中a.a_c值
      console.log(obj1.a.a_c);        // 输出 this is a_C
    
    </script>

    对于深拷贝的简单实现,需递归调用$.extend()实现迭代操作

    $ = {
        extend : function(deep, target, options) {
            for (name in options) {
                copy = options[name];
                if (deep && copy instanceof Array) {
                    target[name] = $.extend(deep, [], copy);
                } else if (deep && copy instanceof Object) {
                    target[name] = $.extend(deep, {}, copy);
                } else {
                    target[name] = options[name];
                }
            }
            return target;
        }
    };

    循环内有三种情况: 
    1. 属性是数组时,target[name]初始化为空数组,递归调用extend; 
    2. 属性是对象时,target[name]初始化为空对象,递归调用extend; 
    3. 否则,直接复制属性。 

  • 相关阅读:
    “echo >”和“echo >>”的区别
    socket 简介
    Shell 获取当前执行脚本的路径
    input子系统 KeyPad-Touch上报数据格式与机制
    Java垃圾回收-GC
    Java多线程-yield函数&interrupt函数
    Java内存模型-堆和栈的区别
    Java反射
    Java正则表达式
    Java多线程-sleep和wait的区别
  • 原文地址:https://www.cnblogs.com/yanjliu/p/3952475.html
Copyright © 2020-2023  润新知