JavaScript:深度复制 Image() 对象

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

此函数的目的是将两个对象合并为一个,并用 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/

相关文章:

javascript - 如何在 ionic 3 中包含 jquery 插件

javascript - 根据键值的存在从数组中删除元素

javascript - 将对象数组转换为键为 : value dynamic 的 en 对象

java - 将文本文件扫描到对象数组中

javascript - 通过 JavaScript 重新加载页面并重新发送表单信息

javascript - 找出 JavaScript 中的对象类型?

c# - C# 对象的深拷贝

arrays - Python '==' 运算符给出了错误的结果

java - 如果 java 类具有另一个用户定义类的成员变量,我们如何使其不可变?

javascript - 动态更改厚框弹出窗口大小