用闭包克隆一个对象

时间:2015-07-30 19:36:58

标签: javascript angularjs

我试图克隆带有闭包的对象。试过angular.copy()



function Foo() {
  var data;

  this.x = function(val) {
    if (val) {
      data = val;
    }
    return data;
  }
}

var a = new Foo();
var b = angular.copy(a);

b.x(); // undefined
a.x(5); // set x
b.x(); // 5. expected undefined




1 个答案:

答案 0 :(得分:1)

如果您愿意,可以在clone对象上创建自己的Foo方法。您只需要确保克隆任何相关数据(如果data f.e.是一个对象,下面的方法只会存储对同一对象的引用)。

function Foo() {
  var data;

  this.x = function(val) {
    if (val) {
      data = val;
    }
    return data;
  }
  this.clone = function() {
    var n = new Foo();
    n.x(data);
    return n;
  }
}

var a = new Foo();
var b = a.clone();

a.x(5); // set x
console.log("a.x: " + a.x()); // 5
console.log("b.x: " + b.x()); // undefined