zoukankan      html  css  js  c++  java
  • angular.extend()和 angular.copy()的区别

    1.angular.copy

     angular.copy(source, [destination]);  // source: copy的对象. 可以使任意类型, 包括null和undefined.    destination:接收的对象   返回复制或更新后的对象

    如果省略了destination,一个新的对象或数组将会被创建出来;
    如果提供了destination,则source对象中的所有元素和属性都会被复制到destination中;
    如果source不是对象或数组(例如是null或undefined), 则返回source;
    如果source和destination类型不一致,则会抛出异常。
     
    angular.copy后,改变source不会影响destination,改变destination 不会改变source
    var source=[1,'source',{id:1,source:'hello'}];
    var des=angular.copy(source);
    source[0]=9;
    source[2].source='change';
    console.log(des);  //输出des不会变化
    var source=[1,'source',{id:1,source:'hello'}];
    var des=angular.copy(source);
    des[0]=9;
    des[2].source="change";
    console.log(source); //输出source不变

     2、angular.extend

    angular.extend(destination, source);

     复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制.

     如果复制的是个基本数值,则改变source不会影响des,改变des不会影响source

    var source=[1,'source',{id:1,source:'hellow'}];
    var des=angular.extend(source);
    source[0]=9;
    source[2].source='change';
    console.log(des);//des改变为和source一致
    var source=[1,'source',{id:1,source:'hello'}];
    var des=angular.extend(source);
    des[0]=9;
    des[2].source="change";
    console.log(source); // source改变

     多个对象复制时

    复制代码
     var modalOptions = {
         closeButtonText: '取消',
         actionButtonText: '确定',
         headerText: 'Proceed?',
         bodyText: 'Perform this action?',
         backdrop:'false',
         type:'1',
         confirm:false
     };
     var customModalDefaults={
         backdrop: 'static'
     };
     var temp={};
     console.log(angular.extend(temp,modalOptions,customModalDefaults));
     console.log(temp.backdrop);// static 我猜想可能是后面的对象的相同属性先替换前一个对象的相同属性,然后层层迭代,再传给目标对象  需要注意的是,虽是层层迭代,但modalOptions不会变,他的backdrop=false
     console.log(angular.extend(temp,customModalDefaults,modalOptions));
     console.log(temp.backdrop); // false 当多个源对象的属性不冲突时,就会合并一起传给目标对象
  • 相关阅读:
    Flash 终将谢幕:微软将于年底( 2020 年 )停止对 Flash 的支持
    分布式id生成方案总结
    如何设计一个亿级网关(API Gateway)?
    服务之间的调用为啥不直接用 HTTP 而用 RPC?
    Dubbo 总结:关于 Dubbo 的重要知识点
    CAP理论解读
    单点登录(SSO)的设计与实现
    入职微软三个月把老板炒了,七个月自己跑路是一种怎样的体验?
    有关链表的小技巧,我都给你总结好了
    排序算法入门之「选择排序」
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/6100395.html
Copyright © 2011-2022 走看看