栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

typescript - cloning object

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

typescript - cloning object

解决具体问题

您可以使用类型断言来告诉编译器您更了解:

public clone(): any {    var cloneObj = new (<any>this.constructor());    for (var attribut in this) {        if (typeof this[attribut] === "object") { cloneObj[attribut] = this[attribut].clone();        } else { cloneObj[attribut] = this[attribut];        }    }    return cloneObj;}

克隆

请记住,有时最好编写自己的映射-而不是完全动态。但是,您可以使用一些“克隆”技巧来给您带来不同的效果。

我将在下面的所有示例中使用以下代码:

class Example {  constructor(public type: string) {  }}class Customer {  constructor(public name: string, public example: Example) {  }  greet() {    return 'Hello ' + this.name;  }}var customer = new Customer('David', new Example('DavidType'));

选项1:点差

属性:
方法:否
深度复制:否

var clone = { ...customer };alert(clone.name + ' ' + clone.example.type); // David DavidType//alert(clone.greet()); // Not OKclone.name = 'Steve';clone.example.type = 'SteveType';alert(customer.name + ' ' + customer.example.type); // David SteveType

选项2:Object.assign

属性:
方法:否
深度复制:否

var clone = Object.assign({}, customer);alert(clone.name + ' ' + clone.example.type); // David DavidTypealert(clone.greet()); // Not OK, although compiler won't spot itclone.name = 'Steve';clone.example.type = 'SteveType';alert(customer.name + ' ' + customer.example.type); // David SteveType

选项3:Object.create

属性: 继承的
方法: 继承的
深复制: 浅的继承 (深的更改会影响原始副本和克隆副本)

var clone = Object.create(customer);alert(clone.name + ' ' + clone.example.type); // David DavidTypealert(clone.greet()); // OKcustomer.name = 'Misha';customer.example = new Example("MishaType");// clone sees changes to original alert(clone.name + ' ' + clone.example.type); // Misha MishaTypeclone.name = 'Steve';clone.example.type = 'SteveType';// original sees changes to clonealert(customer.name + ' ' + customer.example.type); // Misha SteveType

选项4:深层复制功能

属性:
方法:否
深度复制:

function deepCopy(obj) {    var copy;    // Handle the 3 simple types, and null or undefined    if (null == obj || "object" != typeof obj) return obj;    // Handle Date    if (obj instanceof Date) {        copy = new Date();        copy.setTime(obj.getTime());        return copy;    }    // Handle Array    if (obj instanceof Array) {        copy = [];        for (var i = 0, len = obj.length; i < len; i++) { copy[i] = deepCopy(obj[i]);        }        return copy;    }    // Handle Object    if (obj instanceof Object) {        copy = {};        for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = deepCopy(obj[attr]);        }        return copy;    }    throw new Error("Unable to copy obj! Its type isn't supported.");}var clone = <Customer>deepCopy(customer);alert(clone.name + ' ' + clone.example.type); // David DavidType// alert(clone.greet()); // Not OK - not really a customerclone.name = 'Steve';clone.example.type = 'SteveType';alert(customer.name + ' ' + customer.example.type); // David DavidType


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号