日志:未捕获RangeError:超出最大调用堆栈大小

时间:2012-09-07 12:39:52

标签: javascript jquery prototype

我对方法有严重的问题。所以这是我的方法:

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;
}

浏览器正在给我:

  

未捕获RangeError:超出最大调用堆栈大小

在这一行:

for (i in this) {

有人可以遇到同样的问题吗?

1 个答案:

答案 0 :(得分:1)

如果这是任何类型的成就,我可以制作可以破坏克隆功能的javascript对象:)。

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

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

x.y = y;
y.x = x;

克隆其中任何一个。是的,因为循环引用它不会工作。尝试调试您的对象,看看是否有任何循环引用。

还可以尝试将克隆限制为您真正需要的内容。

编辑:

查看有关克隆的问题:What is the most efficient way to deep clone an object in JavaScript?

有很多答案。如果你使用jQuery尝试接受的那个:

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

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