克隆对象的最快方法是什么?

时间:2015-05-05 19:37:04

标签: javascript jquery

我知道$.extend,这几乎可以满足我的需要,但它似乎也在解开'原型,通过将所有方法复制为新对象的成员。有没有办法告诉它跳过继承的成员,还是我必须自己复制复制函数?

这是我目前所拥有的,但我不确定它是否可以改进:

function Foo() {
  this.x = 3;
  this.y = {a: 4};
}
Foo.prototype.z = 5;
Foo.prototype.clone = function() {
  var res = new Foo();
  for (var key in this) {
    if (this.hasOwnProperty(key)) {
      // assuming that all members are plain values or objects/arrays
      if (this[key] instanceof Array) {
        res[key] = $.extend(true, [], this[key]);
      } else if (this[key] instanceof Object) {
        res[key] = $.extend(true, {}, this[key]);
      } else {
        res[key] = this[key];
      }
    }
  }
  return res;
};

var foo = new Foo();
var bar1 = $.extend(true, {}, foo); // {x: 3, y: {a: 4}, z: 5, clone: function}
var bar2 = foo.clone(); // {x: 3, y: {a: 4}}

更新:查看$.extend实施情况,除了hasOwnProperty检查外,它看起来与我的非常相似,所以也许这是最好的方法所有?

0 个答案:

没有答案