0

这是我用来覆盖clone对象属性以创建对象的新副本的函数,而不仅仅是引用。

Object.prototype.clone = function () {
    var newObj = (this instanceof Array) ? [] : {};
    for (i in this)
    {
        if (i == 'clone') continue;
        if (this[i] && typeof this[i] == "object") {
            newObj[i] = this[i].clone();
        } else
            newObj[i] = this[i]
    }
    return newObj;
}

我还向window object.

编辑

实际上我在我的代码中使用了几个库。当我在没有这些库的情况下运行此方法时,它可以正常工作。但是对于这些库,它会给出这个错误。他们可能已经提供了自己的克隆实现。

现在,当我调用此方法时,我得到了Maximum call stack size exceeded.

有什么帮助吗?谢谢

4

1 回答 1

0

在正常情况下尝试您的方法Object {}效果很好,当与Array []

我不完全确定这是您要寻找的,但它解决了问题:

Object.prototype.clone = function () {
    if (this instanceof Array) return this.slice(0);
    var newObj = {};
    for (var i in this) {
        if (i == 'clone') continue;
        if (this[i] && typeof this[i] == "object") {
            newObj[i] = this[i].clone();
        } else newObj[i] = this[i];
    }
    return newObj;
};

如果您Object是一个实例,Array则不需要以这种方式克隆它,我相信您可以返回它并停止该函数。请参阅此 JSFiddle

于 2013-05-27T07:50:16.380 回答