JavaScript:Deep Copy Image()对象

时间:2015-01-06 04:31:22

标签: javascript object deep-copy

我有这个对象合并功能:

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

此函数的目的是将两个对象合并为一个,将obj1的值覆盖为obj2的值(如果存在)。

它适用于大多数对象,但是当我尝试使用它来合并两个Image()对象时,我会陷入无限循环。例如:

merge(new Image(), new Image())

结果:

Uncaught RangeError: Maximum call stack size exceeded

我认为它与对象的事件有关,但我不确定。 为什么你认为这是发生这种情况,如何改进这个功能来解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

第一件事是null是一个对象,所以你要为所有空值调用merge。

其次有一个属性

ownerDocument 

所以你正在循环......