我的方法是继承属性名称'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)
答案 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)