Javascript对象属性继承

时间:2017-01-26 19:54:04

标签: javascript javascript-objects

我的方法是继承属性名称'c'并将其附加到obj1。不知道我在这里缺少什么,而不是'c'我的甲基继承名称'key2'。

var obj1 = {
  a: 1,
  b: 2
};
var obj2 = {
  b: 4,
  c: 3
};

function extend(obj1, obj2) {
    output = {};
    for(var key in obj1){
        for(var key2 in obj2){
            if(key !== key2){
               obj1.key2= obj2[key2];
            }
        }
    }
    return obj1;

    
}
extend(obj1, obj2)

3 个答案:

答案 0 :(得分:2)

您正在对属性名称key2进行硬编码。它需要像obj1[key2]一样分配。 Javascript允许您动态添加属性,也可以在运行时确定属性名称。因此,Obj1[key2]会创建动态属性。

另请注意,由于您使用的是in运算符,因此不会使用Object.hasOwnProperty()方法对属性进行其他检查。对于具有Prototype链的对象,您可以获得有时可能不合适的不同结果。



var obj1 = {
  a: 1,
  b: 2
};
var obj2 = {
  b: 4,
  c: 3
};

function extend(obj1, obj2) {
    output = {};
    for(var key in obj1){
        for(var key2 in obj2){
            if(key !== key2){
               obj1[key2]= obj2[key2];
            }
        }
    }
    return obj1;

    
}
console.log(extend(obj1, obj2));




答案 1 :(得分:0)

当您撰写obj1.key2时,您正在设置名为key2的媒体资源。

这就是JS属性简写符号的工作原理。

您想要obj1[key2]

你还要回归obj1;不确定output的用途。

答案 2 :(得分:0)

在线15,您要将obj1上的媒体资源分配给.key2,而应该像obj1[key2]那样分配属性。这将使用键值进行赋值,就像进行键查找一样。

还有一个奇怪的例子是output变量未使用且未定义,在我的示例中,我已将其从代码中删除。

修复示例:

var obj1 = {
  a: 1,
  b: 2
};
var obj2 = {
  b: 4,
  c: 3
};

function extend(obj1, obj2) {
    for(var key in obj1){
        for(var key2 in obj2){
            if(key !== key2){
               obj1[key2] = obj2[key2];
            }
        }
    }
    return obj1;

    
}
extend(obj1, obj2)

console.log(obj1)