深度clone

1、之前在javascript的设计模式里面看到过,但是没有仔细去分析
2、下面的是一个例子(一种深度clone的写法):

if (Obj instanceof Array) {
        buf = [];  //创建一个空的数组
        var i = Obj.length;
        while (i--) {
            buf[i] = clone(Obj[i]);
        }
        return buf;    www.2cto.com
    }else if (Obj instanceof Object){
        buf = {};  //创建一个空对象
        for (var k in Obj) {  //为这个对象添加新的属性
            buf[k] = clone(Obj[k]);
        }
        return buf;
    }else{
        return Obj;
    }
}

有一点不是很明白,如果是函数,虽然javascript里面函数也可以当成一个对象,但是它在当成一个方法的时候是如何完成clone的呢?感觉有点迷惑

时间: 2024-11-07 02:15:47

深度clone的相关文章

对象复制、克隆、深度clone

-------------------------------------------------------------------------------- ------------------------------------------------- 知道Java对对象和基本的数据类型的处理是不一样的.和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的

JavaScript中一个对象进行深度clone

1 function clone(obj) 2 { 3 if(typeof obj!='object'){ 4 return obj; 5 } 6 7 if(obj instanceof Array){ 8 var arr=[]; 9 for(var i=0; i<obj.length; i++){ 10 arr[i]=clone(obj[i]); 11 } 12 return arr; 13 } 14 else if(obj.constructor==Object){ 15 var json=

JavaScript中如何对一个对象进行深度clone

<!doctype html><html><head><meta charset="utf-8"><title>深克隆</title><script>function clone(obj){ if(typeof obj=='object') { if(obj instanceof Array) { var result=[]; for(var i=0;i<obj.length;i++) { res

java中的clone()

什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的.在 Java语言中,用简单的赋值语句是不能满足这种需求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段. Java的所有类都默认继承java.lang.Object类,在java.lan

java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有限的. 这和c++中内存分配差不多(c++中还要有另一种方式用于全

Java clone()方法使用说明

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象. 比如函数参数类型是自定义的类时,此时便是引用传递而不是值传递.下面是举例: Java代码   public class A { public String name; } Java代码   public class testClone { public void changeA(A 

java的clone方法

最近在写 hugenumber 类中自乘方法的时候遇到了一点问题.发现问题出在未对对象进行克隆上. 以下是关于克隆总结的几点: ----------------------------------------分割线-------------------------------- Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用 的区别,特别是先学c.c++后学java的程序员.并且由于Java不能通过简单的赋值来解决对象复制 的问题,在开发过程中,也常

Java中clone方法的使用

什么是clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并且此后对object2任何改动都不会影响到object1中的值,也就是说,object1与object2是两个独立的对象,但object2的初始值是由object1对象确定的.在Java语言中,用简单的赋值语句是不能满足这种需 求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单

C# 之 类复制 MemberwiseClone与Clone(深 浅 Clone)

MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象.如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型,则复制引用但不复制引用的对象:因此,原始对象及其复本引用同一对象. 为了实现深度复制,我们就必须遍历有相互引用的对象构成的图,并需要处理其中的循环引用结构.这无疑是十分复杂的.幸好借助.Net的序列化和反序列化机制,可以十分简单的深度Clone一个对象.原理很简单,首先将对象序列化到内存流中,此时对象和对象引用