我需要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