JavaScript:如何制作一个对象的副本?
这个问题在这里已经有了答案:
使用Javascript对象和equals( = )运算符时,必须小心。 该运算符不会创建该对象的副本,而只会分配对原始内部对象的引用。
这意味着在你的情况下,b 不会存储a的值,但在调用之后
var b = a;
a和b都指向内存中的同一个对象! 因此,更改b的任何属性也会将它们更改为(再次:它们是内部相同的对象)。
要创建一个对象的副本,您必须手动复制它的每个属性:
var a = {}; // create an empty object
a.prop1 = 1; // set a property of this object
var b = {}; // create another empty object
b.prop1 = a.prop1; // copy all properties (in this case: only one) of a to b
b.test = 1; // add a new property to b
alert(a.test); // => undefined, as .test is only defined for b
a === b; // => false, as a and b are different objects.
克隆JS对象问题的优雅解决方案可以在这里找到:我如何正确地克隆JavaScript对象?
用普通的JavaScript你可以做到:
var copy = JSON.parse(JSON.stringify(myObj));
请参阅:http://jsfiddle.net/kukiwon/AyKdL/
如何使用下面的深层复制模式。 这是来自Stoyan Stefanov的“Javascript Patterns”。
function extendDeep(parent, child) {
var i,
toStr = Object.prototype.toString,
astr = "[object Array]";
child = child || {};
for (i in parent) {
if (parent.hasOwnProperty(i)) {
if (typeof parent[i] === "object") {
child[i] = (toStr.call(parent[i]) === astr) ? [] : {};
extendDeep(parent[i], child[i]);
} else {
child[i] = parent[i];
}
}
}
return child;
}
链接地址: http://www.djcxy.com/p/6953.html