Javascript deepCopyObject 失败

标签 javascript object

我编写了自己的 deepCopy-Function,它能够复制和对象:

function deepCopyObj(object){
    if(object == null || typeof(object) != 'object'){
        return object;
    }

    var copy = object.constructor();   //This line makes some troubles
    for (var attr in object) {
        if(object.hasOwnProperty(attr) && typeof(object[attr]) !== "undefined") {
            copy[attr] = deepCopyObj(object[attr]);
        }
    }
    return copy;
}

这段代码一直工作得很好 - 直到现在: 有时,当我想复制一个对象时,命令 var copy = object.constructor(); 返回 undefined

这是什么原因呢?当我将 object 打印到控制台时,它会给出正确的输出。

请注意,我的代码有时使用 delete object.anAttribute; 来删除函数 - 但我不知道这是否是原因。

最佳答案

另请注意,您的 deepCopyObj() 将仅复制源对象的可枚举属性。

var obj = {name: "Andrew", lastname:"Smith"};
Object.defineProperty(obj,"id",{
    enumerable:false,
    configurable:true,
    writeable:true,
    value:"1"
});
var newObj = deepCopyObj(obj);

newObj.id 返回未定义

参见How do I correctly clone a JavaScript object?进一步解释

关于Javascript deepCopyObject 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336843/

相关文章:

javascript - 基本 JavaScript 石头剪刀布游戏无法正常运行

javascript - 无法将我的页面链接到 node.js 中的路由器

JavaScript 应用()

javascript - 使用类而不是使用抛出对象作为返回值的函数有什么优点?

javascript - 如何将 jQuery DataTable 单元格的默认内容设置为可单击按钮?

javascript - js : Sort array of objects by it's value

javascript - 对数字等自定义对象求和 (Javascript)

javascript - AngularJS Controller 内的数组未初始化

javascript - 在 Jquery Mobile 中动态创建和添加页面

javascript - getDetails() 中设置状态发生无限循环