我有这个对象合并功能:
function merge( obj1, obj2 )
{
var result = {};
for( var prop in obj1 )
{
if( obj2.hasOwnProperty(prop) )
{
if( 'object' === typeof obj1[prop] && 'object' === typeof obj2[prop] )
{
result[prop] = merge( obj1[prop], obj2[prop] );
}
else
{
result[prop] = obj2[prop];
}
}
else
{
result[prop] = obj1[prop];
}
}
return result;
};
此函数的目的是将两个对象合并为一个,并用 obj2 的值覆盖 obj1 的值(如果存在)。
它适用于大多数对象,但是当我尝试使用它来合并两个 Image()
对象时,我陷入了无限循环。例如:
merge(new Image(), new Image())
结果:
Uncaught RangeError: Maximum call stack size exceeded
我认为这与对象的事件有关,但我不确定。 您认为为什么会发生这种情况?如何改进此功能来解决此问题?
最佳答案
首先,null 是一个对象,因此您要对所有 null 调用合并。
第二个是属性
ownerDocument
所以你正在循环...
关于JavaScript:深度复制 Image() 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27792109/