Javascript中是否有复制构造函数?

时间:2015-05-08 15:08:10

标签: javascript

我在javascript中创建一个对象。但是,我知道我正在使用新的className()运算符。我想知道我是否可以创建一个复制构造函数,所以当我创建一个新对象,即var object1 = object2时,只有object2中的成员变量被复制到object1中,而不是指针。谢谢!

1 个答案:

答案 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>