[code]function clone(obj) var copy; // Handle the 3 simple types,and null or undefined if (null == obj || "object" != typeof obj) return obj; // Handle Date if (obj instanceof Date) copy = new Date();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;copy.setTime(obj.getTime();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return copy; } // Handle Array if (obj instanceof Array) copy = for (var i = 0,len = obj.length; i 只要对象和数组中的数据形成树结构,上述函数就可以完全适用于我提到的 6 简单类型。换句话说,对象中不超过一个引用相同数据。[code]// This would be cloneable:var tree = "left" : "left" : null,"right" : null,"data" "right" : null, "data" : 8}This would kind-of work,but you would get 2 copies of the // inner node instead of 2 references to the same copyvar directedAcylicGraph = "left" : "left" : null,"right" : null,"data" "data" : 8};directedAcyclicGraph["right"] = directedAcyclicGraph["left"];// Cloning this would cause a stack overflow due to infinite recursion:var cyclicGraph = "left" : "left" : null,"right" : null,"data" "data" : 8};cyclicGraph["right"] = cyclicGraph; 1 A2 X0 z, V e9 v5 q) I