重写对象'的克隆属性超出了最大调用堆栈大小

Maximum call stack size exceeded with overriding object's clone property JavaScript

本文关键字:调用 堆栈 属性 对象 重写      更新时间:2023-09-26

这是我的函数,我使用它来覆盖对象的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

帮忙吗?谢谢你

在正常的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;
};

如果您的ObjectArray的实例,那么以这种方式克隆它是不必要的,我相信您可以返回它并停止函数。