【问题标题】:JavaScript: Deep Copy Image() ObjectJavaScript:深拷贝图像()对象
【发布时间】:2025-12-01 09:35:02
【问题描述】:

我有这个对象合并功能:

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

我认为这与对象的事件有关,但我不确定。 您认为为什么会出现这种情况,以及如何改进此功能以解决此问题?

【问题讨论】:

  • 你想通过合并两个 Image 对象来完成什么?
  • 为什么不使用cloneNode
  • @MattBall 我正在尝试合并两个具有 Image 对象作为其属性之一的对象
  • @AlexanderO'Mara 如何使用 cloneNode 合并两个对象并覆盖值?
  • @YoavKadosh 您可以添加一个案例,如果属性值为节点,则使用它来复制元素。

标签: javascript object deep-copy


【解决方案1】:

首先,null 是一个对象,因此您正在为所有 null 调用合并。

第二个有属性

ownerDocument 

所以你在循环...

【讨论】:

    最近更新 更多