【发布时间】:2014-05-03 17:07:59
【问题描述】:
我需要一个用于 JavaScript 文字对象的克隆函数,它现在甚至不需要递归克隆。该函数必须是纯 JavaScript,不能使用任何库。我做了一些研究,正如一些最简化的answers 到this 问题所暗示的那样,在这种情况下,我所需要的只是带有 hasOwnProperty 检查的“for in”循环。问题在于,所谓复制的对象表现得好像我已经复制了对新对象中原始属性的引用。那不是我的目标。克隆功能的方式是源对象的任何更改都不会影响目标对象,反之亦然。 代码如下:
...
function clone(from,to){
for (var key in from){
if(from.hasOwnProperty(key)){
to[key]=from[key];
}
}
return to;
}
...
var newComponent = clone(component,{});
var defaultComponentDrawParams = clone(component.drawParams,{});
if(params.type==="button"){
console.info('new component');
component.drawParams.subType="chinga chunga";
console.info(defaultComponentDrawParams.subType);
console.info(newComponent.drawParams.subType);
}
控制台显示:
new component
saveFile
chinga chunga
如果我理解正确,“新组件”之后的两个输出都应该是“未定义”,因为我的目标是在更改 component.drawParams 时不更改 newComponent.drawParams。 请告诉我我错过了什么。
【问题讨论】:
标签: javascript copy clone pass-by-value