js --- 深复制,浅复制

 1 //浅复制
 2 var obj={
 3     a:{
 4         son1:‘aa‘,  //obj对象里的a也是个对象
 5         son2:‘bb‘
 6     },
 7     b:20
 8 };
 9
10 function copy(obj){
11     var newobj={};
12     for(arr in obj)
13     {
14         newobj[arr]=obj[arr]
15     }
16     return newobj;
17 }
18
19 obj2=copy(obj);
20 alert(obj2.a.son1);//成功复制出obj的a
21 obj.a.son1=555;  //更改了obj的a.son2
22 alert(obj2.a.son1);//obj2的a.son1也随之改变  
//深复制
var obj={
        a:{aa:10},//浅拷贝解决不了对象中的对象
        b:11
    };
    function deepcopy(obj){  

        if(typeof obj!=‘object‘) //检验是否彻底
        {
            return obj;
        }  

        var newobj={};  

        for(var attr in obj)
        {
            newobj[attr]=deepcopy(obj[attr]); //递归 (核心代码)
        }
        return newobj;
    }
    var obj2=deepcopy(obj);
    alert(obj.a.aa);//10
    alert(obj2.a.aa);//10 成功复制深层对象aa
    obj2.a.aa=22;  //改变obj2的a的aa
    alert(obj2.a.aa);//  改变
    alert(obj.a.aa);//10  不变  
时间: 2024-08-02 23:31:19

js --- 深复制,浅复制的相关文章

深复制 浅复制

深复制:不仅复制对象 还复制对象关联的对象 浅复制:只是复制对象本身 不复制对象关联的对象 // // main.m // 对象的复制 // // Created by MAC on 15/12/20. // Copyright © 2015年 MAC. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * ar

简单理解php深复制浅复制问题

其实接触深复制浅复制是通过学习c++了解到的,比如c++很好用的模板,php是不允许方法模板和类模板 一个简单的例子,如果不是很了解php 的取地址符&,可以去看下官方文档,php的&就是别名 class zx{ public $r ='44444444<br>'; public function __construct() { } public function ccccc() { echo $this->r; } } $rr = new zx(); //$ee = $

OpenCv学习笔记(四)--Mat基本图像容器Mat对象信息头,矩阵体的创建,深复制,浅复制详解

1--我们知道Mat是一个图像容器类,这个数据结构由两部分组成: 1--矩阵头--即class Mat类所实例化的类对象所开辟的空间里面存储的数据---就是这个矩阵的信息,当我们以 Mat object;这样声明类对象的时候,也仅仅是创建了一个Mat的信息头,并没有创建矩阵体,也就是说,我们并 没有给将要存储的图像开辟相应的空间 2--矩阵头--包含: 1--矩阵的尺寸----比如---class Mat这个类中的----数据成员rows,cols---就可以指定图像的尺寸 2--存储方法---

【C/C++】复制构造函数、深复制浅复制

常见问题 Q1. 下面代码的输出结果是( )? 1 #include <iostream> 2 using namespace std; 3 4 class MyClass 5 { 6 public: 7 MyClass(int n) { number = n; } 8 MyClass(const MyClass &other) 9 { 10 number = other.number; 11 cout << "a "; 12 } 13 private:

iOS学习(二)之深复制&amp;浅复制

1.无论是深复制还是浅复制,被复制的对象类型是不变的.此对象类型具有什么功能就具有什么功能,不会因为自行修改了返回对象的指针类型而改变. 比如: 这里的str和str1的值和指针地址完全一样,因为是不可变类型使用了copy,什么都不变.为什么NSNumber类型的指针可以指向NSSring类型copy出的对象呢?因为copy返回类型为id万能指针类型.如果返回的是instancetype就会警告. 记住:对于不可变的临时变量使用浅复制copy没什么用,地址和值都一样. 2.怎么理解最后一句话?

复制构造函数——深复制 浅复制

隐含的复制构造函数并不总是适用的,因为它完成的只是浅复制. 对象的浅复制 1 #include<iostream> 2 #include<cassert> 3 using namespace std; 4 class Point{ 5 public: 6 Point() :x(0), y(0)//默认构造函数 7 { 8 cout << "constructor1" << endl; 9 } 10 Point(int x, int y)

Python深复制浅复制or深拷贝浅拷贝

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存) 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 小例子: import copy a = [1, 2, 3, 4, ['a', 'b', 'c']] b = a c = copy.copy(a) d = copy.deepcopy(a) print(id(a))#2552169009288 print(id(b))#2552169009288 print(id(c))#255216

iOS中的深复制与浅复制

很多语言中都有深复制浅复制的概念,如C++,ObjC等.简单来说,浅复制就是两个变量指向了同一块内存区域,深复制就是两个变量指向了不同的内存区域,但是两个内存区域里面的内容是一样的. 浅复制示意图: 深复制示意图: iOS开发中,浅复制和深复制要更复杂一些,涉及到集合对象和非集合对象的copy与mutableCopy. 非集合对象:如NSString,NSInteger,NSNumber…… 集合对象:如NSArray,NSDictionary,…… 1:非集合对象的copy与mutableCo

python中深复制与浅复制

转载:http://blog.csdn.net/vicken520/article/details/8227524 java中也经常碰见这种问题.时间原因就不写java方面啦 Python深复制浅复制or深拷贝浅拷贝 简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >>>import copy>>>a = [1, 2, 3, 4, ['a', 

关于深复制与浅复制

转自“红黑联盟”,网址:http://www.2cto.com/kf/201405/302273.html 第一.复制对象的基本概念 复制一个对象为副本,开辟一块新的内存来存储副本对象. 第二.如果一个对象想具备复制的功能,必须实现协议和协议 NSObject自带的常用的对象有:NSNumber.NSString.NSArray.NSDictionary.NSMutableArray.NSMutableDictionay.NSMutableString,copy产生的对象时不可变的,mutabl