我有一个打字稿课程
export class Restaurant {
constructor ( private id: string, private name: string ) {
}
public getId() : string {
return this.id;
}
public setId(_id : string) {
this.id = _id;
}
public getName () {
return this.name;
}
public setName ( _name:string ) {
this.name = _name;
}
}
然后我有一个此类的实例(这是一个示例):
restaurant:Restaurant = new Restaurant(1,"TestRest");
然后我将这个餐厅对象存储在某种缓存中
cache.store( restaurant );
然后后来在我的申请中我拿回了餐厅
var restToEdit = cache.get( "1" );
restToEdit.setName( "NewName" );
但由于 javascript 通过对象的引用传递,我对restToEdit 所做的更改也会保存在缓存中的餐厅中。
我基本上希望缓存中的餐厅是与restToEdit 完全不同的实例。
我尝试过使用 jQuery.clone 和扩展,但它似乎不起作用,我认为这是因为它是一个打字稿对象。或者这并不重要?
任何有关如何克隆该对象的答案将不胜感激
Thanks
-
使用标准ES6 特性 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
const clone = Object.assign({}, myObject)
警告:这将执行浅克隆。
This 来自 MDN 的优秀页面 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign包含大量有关克隆的详细信息,包括 ES5 的 polyfill
-
深度克隆的一种“快速”方法是使用JSON
公用事业
const clone = JSON.parse(JSON.stringify(myObject))
克隆的“正确”方法是实现克隆方法或复制构造函数......
我知道我知道,没有足够的 JQuery https://meta.stackexchange.com/a/19492/353280
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)