javascript - 日志 : Uncaught RangeError: Maximum call stack size exceeded

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

浏览器给我:

Uncaught RangeError: Maximum call stack size exceeded

在线:

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;

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

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

编辑:

查看有关克隆的问题: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);

关于javascript - 日志 : Uncaught RangeError: Maximum call stack size exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318317/

相关文章:

javascript - 替换双 http ://or https://

javascript - 如何为表单 Javascript 中的选择分配数值

Javascript 在选项卡交换时停止

jquery - 如何根据里面的div改变div的样式?

java - 在 JavaScript 中将函数作为字符串传递

javascript - JS中使用OOP的几种格式

javascript - 如何使用JS替换字符串?

javascript - 失去对象内函数的作用域

jquery - Bootstrap-table 可编辑扩展和 x-editable 写回 JSON

javascript - 原型(prototype)函数调用返回未定义