Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中克隆对象_Javascript_Html_Clone - Fatal编程技术网

在JavaScript中克隆对象

在JavaScript中克隆对象,javascript,html,clone,Javascript,Html,Clone,嗨,我已经使用下面的代码创建了这个对象 var parent = {}; parent["Task name"] = "Task " + ++x; parent["Start time"] = "01/03/2013"; parent["End time"] = "01/08/2013"; parent["Duration"] = "5 days"; parent["Status"] = Math.round(Math.random() * 100); 如何使用JavaScript代码克隆/获

嗨,我已经使用下面的代码创建了这个对象

var parent = {};
parent["Task name"] = "Task " + ++x;
parent["Start time"] = "01/03/2013";
parent["End time"] = "01/08/2013";
parent["Duration"] = "5 days";
parent["Status"] = Math.round(Math.random() * 100);

如何使用JavaScript代码克隆/获取对象的副本。是否有其他方法可以实现此目的?

克隆对象的最简单方法是使用以下功能:

function clone(a){var b=function(){};b.prototype=a;return new b;}
这将创建对象的基本副本,但请注意,这不会创建深度副本,而只创建浅副本。

使用jQuery尝试此操作:

var parent = {};
                parent["Task name"] = "Task " + ++x;
                parent["Start time"] = "01/03/2013";
                parent["End time"] = "01/08/2013";
                parent["Duration"] = "5 days";
                parent["Status"] = Math.round(Math.random() * 100);
var newObj = jQuery.extend(true, {}, parent);

最基本的方法如下:

var clone = {};
for (var k in parent) {
    clone[k] = parent[k];
}

在这种情况下有效,因为所有值都是基元类型。

@wared如果出现typeError,则输入“a”显然不是有效对象,或者您试图传入一个本机对象(或者根本没有对象),因此您应该预期会失败,因为它被设计为只处理javascript对象而不处理其他对象。@wared我修复了它(b未被转换为函数),原始代码直接来自我的一个已经缩小的脚本,缩小时可能出现错误。@wared脚本正在积极使用,因此不应该出现任何问题,但检查后发现使用它的代码还不需要克隆方法,因此错误被忽略。@wared当然是clon除非这些属性被更改,否则e本身不会拥有这些属性,这就是原型设计的工作原理,这就是为什么它是一个
浅的
克隆,它模仿
a
的属性,除非
b
上的那些属性被明确设置。不管你怎么想,这是克隆对象的最经济有效的方法,而且与其他方法不同hod没有递归循环的风险。当然,除非您有新的Object.create可用,甚至这还远远不够完美。克隆javascript对象非常困难,不可能正确快速地完成。事实上,您不应该使用原型来克隆对象。这与深度或深度无关哦,复制,这叫做继承,这是一个完全不同的主题。