重写对象'的克隆属性超出了最大调用堆栈大小
Maximum call stack size exceeded with overriding object's clone property JavaScript
这是我的函数,我使用它来覆盖对象的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;
};
如果您的Object
是Array
的实例,那么以这种方式克隆它是不必要的,我相信您可以返回它并停止函数。
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 超过了async.detect最大调用堆栈大小
- 如何远程检查JavaScript应用程序的函数调用堆栈
- 超过了最大调用堆栈大小,循环无限
- 超过了最大调用堆栈大小.递归标签
- 日志:未捕获的范围错误:超过了最大调用堆栈大小
- 未捕获的范围错误:setTimeout()超过了最大调用堆栈大小
- JavaFX+WebView/Javascript:setTimeOut不起作用调用堆栈来自Java
- JavaScript继承:未捕获的范围错误:超过了最大调用堆栈大小
- 使用$cookies和$stateChangeStart检查sessionID是否超过了最大调用堆栈
- jQuery捕获"RangeError:超过了最大调用堆栈大小“;
- 设置这个.RangeError:超过了最大调用堆栈大小
- 收到“范围错误: 超出最大调用堆栈大小”错误
- 递归 - 测试最大堆栈大小时,调用堆栈无法弹出
- 轮询 ajax 函数超出调用堆栈
- Chrome RangeError:使用jQuery$.map时超过了最大调用堆栈大小
- 要求JS 2.1.9引起“;最大调用堆栈"使用Grunt时出错
- Chrome/jQuery未捕获范围错误:超过了最大调用堆栈大小(函数循环)
- 超过了最大调用堆栈大小-没有明显的递归
- 警告:字体加载过程中出错:轨道上的PDFJS超过了最大调用堆栈大小错误