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

Javascript 日志:未捕获范围错误:超过最大调用堆栈大小,javascript,jquery,prototype,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].c

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

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对象,如果这是任何类型的成就,它会破坏您的clonage函数:)

检查:

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

同时尝试将克隆限制在您真正需要的范围内

编辑:

查看有关克隆的问题:

有很多答案。如果使用jQuery,请尝试接受的:

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

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

您可能会无限次或非常频繁地调用
.clonage
。Frits可能是对的。你能告诉我们你怎么称呼它吗?我只是在一个clonage调用上测试了它,它工作得很好。我是这样使用它的:window.tweetOrberByPassed=window.displayedTweetListing.clonage();它们都是对象。我在另一个脚本页面中有相同的功能,我对此没有问题。这有点奇怪。有没有其他方法可以克隆对象?我想我的方法可以做到这一点:sIt的javascript。你可以用愚蠢的方式克隆,我会编辑我的答案。第二个救了我的命!再次感谢你!var newObject=jQuery.extend(true,{},oldObject);
// Shallow copy
var newObject = jQuery.extend({}, oldObject);

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