我正在开发 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/