日志:未捕获的范围错误:超过了最大调用堆栈大小

Log : Uncaught RangeError: Maximum call stack size exceeded

本文关键字:过了 堆栈 调用 错误 范围 日志      更新时间:2023-09-26

我有一个关于方法的严重问题。这就是我的方法:

Object.prototype.clonage = 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].clonage();
    } else newObj[i] = this[i]
  } return newObj;
}

浏览器给了我:

未捕获范围错误:超出的最大调用堆栈大小

在线路上:

for (i in this) {

有人会有同样的问题吗?

如果这是任何类型的成就,我可以创建可以破坏克隆函数的javascript对象:)。

检查:http://jsfiddle.net/Bd6XL/2/

var x = { 
    a: 5, 
    b: "asdf" 
};
var y = { 
    a: 5, 
    b: "asdf" 
};
x.y = y;
y.x = x;

克隆其中任何一个。是的,由于循环引用,它不起作用。试着调试对象,看看是否有任何循环引用。

同时,尽量将你的克隆限制在你真正需要的范围内。

编辑:

看看这个关于克隆的问题:在JavaScript中深度克隆对象最有效的方法是什么?

有不少答案。如果您使用jQuery:,请尝试已接受的

// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);