jeśli nie chcesz używać JSON.parse (JSON.stringify (Object)) można utworzyć wielokrotnie kopiuje klucz-wartość:
function copy(item){
let result = null;
if(!item) return result;
if(Array.isArray(item)){
result = [];
item.forEach(element=>{
result.push(copy(element));
});
}
else if(item instanceof Object && !(item instanceof Function)){
result = {};
for(let key in item){
if(key){
result[key] = copy(item[key]);
}
}
}
return result || item;
}
ale najlepszym sposobem jest, aby utworzyć klasę, która może zwróć klona to self
class MyClass{
data = null;
constructor(values){ this.data = values }
toString(){ console.log("MyClass: "+this.data.toString(;) }
remove(id){ this.data = data.filter(d=>d.id!==id) }
clone(){ return new MyClass(this.data) }
}
Twój przykład jest nieprawidłowy javascript, przy okazji. –
To nie jest legalne ES6. Ale jeśli tak nie było, nie jest to klon: zarówno twój klon jak i oryginalne właściwości wskazują na to samo teraz. Na przykład 'original = {a: [1,2,3]}' daje ci klon z 'clone.a' dosłownie będący' original.a'. Modyfikacja poprzez 'clone' lub' original' modyfikuje * to samo *, więc nie, to jest złe =) –
@AlbertoRivera To * trochę * poprawny JavaScript, ponieważ jest to [etap 2] (https: // github. com/sebmarkbage/ecmascript-rest-spread), która prawdopodobnie będzie przyszłym dodatkiem do standardu JavaScript. – Frxstrem