function clone(object){
   function F(){}
   F.prototype = object;
   return new F();
}不清楚 有什么优势?求高手知道。

解决方案 »

  1.   

    完整的把原来的OBJECT原样复制一次。
    如果该对象很简单,则没什么优势或说优势不大。
    但是如果该对象本身还包含了很多的子对象、属性、子节点等,优势就不用我说了吧,想想如果不克隆,那一个个的定义子对象、属性、子节点是什么样的工作量呢?
      

  2.   

    这个是潜克隆。
    还有个深度克隆。现在需要800个对象,存储的是编号分别是1-800的小球。
    建立一个通用的小球类,这些小球只有编号和x、y坐标是不一样的。
    所以可以new一个编号是1的小球,然后复制799份,只是修改新复制出来的对象的编号和坐标。
    然后根据小球的的信息,比如x、y坐标,在画布或者其他的什么地方绘制小球。
    这是我能想到的一个例子吧。至于dom元素有node.cloneNode(ifDeep)方法。
      

  3.   

          深克隆与浅克隆
    对象是互相引用的,即对象中可能包含了另一个对象的引用,举例如:有一个Order对象,Order对象中又包含了LineItems对象,然后LineItems对象又包含了Item对象。
    假设现在我有一个Order对象order1,它包含了一个LineItems对象items,这表示的是有一个订单order1,订单的内容是items。
    好的,现在有另一个客户想要一份订单,内容跟order1完全一样,那么在系统的逻辑层我们怎么做呢?很简单,order2=order1.clone(). 我们知道clone方法是在内存中生成一个新的对象,而不是只得到原对象的引用。这时候,有人说话了:“哦,明白了我们对order2的成员变量进行修改,是不会影响order1的。” 很可惜,这句话只对了一半。
    假设order类有一个成员变量name,当然改变order2.name不会影响order1.name,因为他们在不同的内存区域。但是如果改变 order1.items呢?很遗憾,简单地使用order1.clone,是会影响到order2.items的。原因很简单,就是因为clone方法默认的是浅克隆,即不会克隆对象引用的对象,而只是简单地复制这个引用。所以在上例中,items对象在内存中只有一个,order1和order2都指向它,任何一个对象对它的修改都会影响另一个对象。
    那相对浅克隆,深克隆自然就是会克隆对象引用的对象了。也就是说,在上例中,改变order1.items并不会影响order2.items了。因为内存中有两个一样的items。
    如果实现深克隆?一个方法自然是重写clone方法,添加如order.items=(LineItems)items.clone()的语句,也就是人为地添加对引用对象的复制。这个方法的缺点是如果引用对象有很多,或者说引用套引用很多重,那么太麻烦了。业界常用的方法是使用串行化然后反串行化的方法来实现深克隆。由于串行化后,对象写到流中,所有引用的对象都包含进来了,所以反串行化后,对等于生成了一个完全克隆的对象。绝!
    这个方法的要求是对象(包括被引用对象)必须事先了Serializable接口,否则就要用transient关键字将其排除在复制过程中。
      

  4.   

    好抽象啊,貌似是java的语法,js 有吗