我需要JavaScript文字对象的克隆函数,它甚至不需要现在递归地克隆。该功能需要是纯粹的JavaScript没有库可以使用。我已经做了一些研究,并作为一些最简化的answers到this问题建议,在这种情况下,我需要的所有内容都是for for循环hasOwnProperty检查。问题是假定复制的对象表现得好像我已经将引用复制到新对象中的原始属性。这不是我的目标。克隆功能的方式是,源对象的任何更改都不会影响目标对象,反之亦然。 下面是代码:为什么我的简单,纯粹的JavaScript,浅层克隆功能不能像我期望的那样工作?
...
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
如果我两个输出后的“新组件”应为“不确定的”,因为我的目标是不断变化的组件时,正确理解.drawParams不能更改newComponent.drawParams。 请告诉我我错过了什么。
我不想使用外部库,并且就我所知的'if(typeof val ==='object')'而言,我将它简单地调用函数本身,以防其中一个对象属性是对象本身。换句话说,我没有看到属性复制方式的任何改变,但我会尝试。 – DNikolov