javascript - 复制/克隆 Javascript 对象

标签 javascript jquery

有没有办法克隆 javascript 对象?不是 DOM 元素,而是具有特定构造函数的对象。例如,假设我有一个电话号码对象:

function PhoneNumber(number, type) {
    this.number = number;
    this.type = type;
}

var phoneObj1 = new PhoneNumber('1111111111', 'Home');
var phoneObj2 = //Copy of phoneObj1, but unique so I can set other parameters if necessary.

jQuery 通过扩展为我解决了这个问题。

var phoneObj2 = $.extend({}, phoneObj1);

但它返回一个通用对象:

Object{number:'1111111111' type:'Home'}

而不是电话号码构造函数名称。我需要一种方法来传递原始 phoneObj1 的构造函数,而无需在扩展中实际编写 new PhoneNumber(),因为正在使用的代码被许多不同类型的对象使用,所以在任何给定时间我都不知道确切的除了我有一个要引用的对象之外,应该使用的构造函数。

var phoneObj2 = $.extend(new PhoneNumber(), phoneObj1); //I CANNOT do this!

//Maybe something like this?
var phoneObj2 = $.extend(new phoneObj1.constructor.name, phoneObj1); //This throws an error.

最佳答案

您可以在每种不同类型的对象上使用一个方法(可能称为 copy()),该方法要么返回该类型对象的构造函数,要么只复制自身(调用正确的构造函数,因为它知道它是什么类型的对象)。因此,您只需对所有对象调用相同的方法,它就会为您完成工作。

您可以将此功能放在基类中,每个派生类所要做的就是设置构造函数,所有其余代码都是通用的。

关于javascript - 复制/克隆 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815730/

相关文章:

javascript - 使用 jQuery 将 id 添加到特定按钮

jquery - 添加动态名称按顺序输入

javascript - Jquery 没有从下拉列表中获取选定的值

php - AJAX 从 MySQL 选择

javascript - simpleCart js 缩略图图像未定义

javascript - jquery css 定位中的百分比

javascript - 空的缩小 React 应用程序,为什么它已经很大了?

javascript - 阻止javascript中简单模式对话框的背景

javascript - 即内存释放

javascript - 寻找像 stackoverflow 这样的鼠标悬停功能