javascript - jQuery.extend 使用自引用抛出堆栈溢出异常

标签 javascript jquery stack-overflow extend

我正在开发 JavaScript 应用程序时,我注意到:使用 jQuery.extend 函数在与具有自身引用的对象一起使用时具有特殊行为。

如果你运行this脚本:

var x = new (function(){ this.self = this });
var y = {}; y.self = y;

console.log($.extend(true, {}, x))
console.log($.extend(true, {}, y))

您会注意到,使用“x”扩展效果很好,而使用“y”扩展则抛出 stack overflow异常。

你能解释一下这种行为吗?

最佳答案

区别在于该对象是否是普通对象。 x 有一个构造函数;因此,当 extend 达到 self 的值时,我想 jQuery 不想深度复制它,因为它不知道它可以正确地重新创建它,并且最终得到该属性的简单非深拷贝。

另一方面,

y 作为 POJO checkout ,并且 extend 认为可以对其进行深度复制,这会导致无限递归。

看看extend code ,其中显示“//如果我们合并普通对象或数组,则递归

关于javascript - jQuery.extend 使用自引用抛出堆栈溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19943685/

相关文章:

javascript - Q. 如何在图像层上选择一个图像?

javascript - JQuery Lined TextArea 调整大小问题

javascript - jquery ui datepicker range clear value 基于另一个选择的值

java - hibernate 保存时发生 StackOverflowError

java - 是否可以监听 JTable 中特定列的数据变化?

javascript - 在单选按钮选择上显示元素

javascript - 如何使用 jQuery ContextMenu 在一个表中有两个不同的菜单,一个在另一个之上?

jquery - 需要帮助一次处理多个 jquery $.get 调用

haskell - 通常是什么导致haskell中的 "Error C stack overflow"

javascript - 在除法上调用 JavaScript 函数( Bootstrap 模式弹出窗口)