我在javascript中创建一个对象。但是,我知道我正在使用新的className()运算符。我想知道我是否可以创建一个复制构造函数,所以当我创建一个新对象,即var object1 = object2时,只有object2中的成员变量被复制到object1中,而不是指针。谢谢!
答案 0 :(得分:4)
JS不会为任何对象自动生成构造函数 - 复制,移动或其他方式。你必须自己定义它们。
最接近你的是Object.create
,它采用原型和现有对象来复制属性。
要定义复制构造函数,您可以从以下行开始:
function Foo(other) {
if (other instanceof Foo) {
this.bar = other.bar;
} else {
this.bar = other;
}
}
var a = new Foo(3);
var b = new Foo(a);
document.getElementById('bar').textContent = b.bar;
<pre id="bar"></pre>
使用它来支持深度复制只是相同模式的递归:
function Foo(other) {
if (other instanceof Foo) {
this.bar = new Bar(other.bar);
} else {
this.bar = new Bar(other);
}
}
function Bar(other) {
if (other instanceof Bar) {
this.val = other.val;
} else {
this.val = other;
}
}
Bar.prototype.increment = function () {
this.val++;
}
Bar.prototype.fetch = function () {
return this.val;
}
var a = new Foo(3);
var b = new Foo(a);
a.bar.increment();
document.getElementById('a').textContent = a.bar.fetch();
document.getElementById('b').textContent = b.bar.fetch();
<pre id="a"></pre>
<pre id="b"></pre>