javascript - 无法在 JavaScript 中复制对象属性

标签 javascript jquery oop object

我有一个 ajax 调用,它收集某些实体的父级和子级依赖项。在 success 函数中,我将 ajax 返回的数据(数据)分配给全局级别的对象。

$.ajax(
{
    type: "POST",
    url: 'ajax_handler.php',
    data: {action:'get_dependencies', relation:relation, 'jobs[]':jobs, project:project},
    dataType: 'json',
    async: false, //do not change
    success: function(data)
    {
        for(var key in data)
        {
            if( data.hasOwnProperty(key) )
            {
                //Copy data object to document level existingDependency object
                existingDependency[key] = data[key];
            }
        }
    },
    error: function(xhr)
    {
        alert('error2:'+xhr.responseText);
    }
});

我在一个函数中调用了两次 AJAX。一份给 parent ,一份给 child 。我认为这一行 existingDependency[key] = data[key]; 正在重新分配对象,因此之前的分配会丢失。换句话说,existingDependency 对象不能同时保存 ['parent'] 和 ['child'] 属性。

为了解决这个问题,我进行了以下更改,以便existingDependency 保留这两个属性:

success: function(data)
{
    for(var key in data)
    {
        if( data[key].hasOwnProperty(relation) )
        {
            //Copy data object to document level existingDependency object
            existingDependency[key][relation] = data[key][relation];
        }
    }
}

但这根本不起作用。现有依赖对象为空。下面的警报为空。

var keys = '';
for(key in existingDependency)
{
    keys += key+'\n';
}

alert(keys);

您知道为什么此分配 existingDependency[key][relation] = data[key][relation] 不起作用吗? data[key][relation] 保存一个数组(如果有任何区别)。

最佳答案

使用extend :

$.ajax({
    type: "POST",
    url: 'ajax_handler.php',
    data: {
        action:'get_dependencies', 
        relation:relation, 
        'jobs[]':jobs, 
        project:project
    },
    dataType: 'json',
    async: false, //do not change
    success: function(data) {
        $.extend(true, existingDependency, data);//this will copy/merge "data" into "existingDependency". properties from "data" that also exist in "existingDependency" will be overwritten with those from "data".
    },
    error: function(xhr) {
        alert('error2:'+xhr.responseText);
    }
});

至于为什么 eD[key] = data[key] 有效,而 eD[key][relation] = data[key][relation] 则在无法运行代码并调试它的情况下并不难说。但如果 eD[key] 尚不存在,那么它将无法向其添加“关系”。一个可能的解决办法是:

if (!eD.hasOwnProperty(key)){
    eD[key] = {};
}
eD[key][relation] = data[key][relation];

关于javascript - 无法在 JavaScript 中复制对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072854/

相关文章:

javascript - 使用 casperjs 通过 AJAX 发送 POST/PUT

javascript - 使用javascript/jQuery查找最接近鼠标位置的网格坐标

java - 面向对象编程、方法调用未按预期工作、子类

javascript - 在 Twitter Bootstrap 3.0 中滚动时使用 href 动态设置 popover 值

javascript - 内容:encoded: in JSON with JQuery

javascript - Bootstrap 3 un 折叠类错误

javascript - 在 Google map 中动态更改信息窗口的内容

javascript - 获取当前类的声明内容

java - 在不同方法中重用 FileWriter 时在哪里关闭它?

javascript - 在某个div中打开链接并替换html上的div图像