Javascript对象属性继承
我的方法的目标是继承属性名“c”并将其附加到obj1。不确定我在这里遗漏了什么,我的冰毒继承了名字“key2”,而不是“c”Javascript对象属性继承,javascript,javascript-objects,Javascript,Javascript Objects,我的方法的目标是继承属性名“c”并将其附加到obj1。不确定我在这里遗漏了什么,我的冰毒继承了名字“key2”,而不是“c” var obj1={ 答:1,, b:2 }; 变量obj2={ b:4, c:3 }; 功能扩展(obj1、obj2){ 输出={}; 用于(obj1中的var键){ 用于(obj2中的var键2){ 如果(键!==键2){ obj1.key2=obj2[key2]; } } } 返回obj1; } 扩展(obj1,obj2)当您编写obj1.key2时,您正在设置一
var obj1={
答:1,,
b:2
};
变量obj2={
b:4,
c:3
};
功能扩展(obj1、obj2){
输出={};
用于(obj1中的var键){
用于(obj2中的var键2){
如果(键!==键2){
obj1.key2=obj2[key2];
}
}
}
返回obj1;
}
扩展(obj1,obj2)
当您编写obj1.key2
时,您正在设置一个名为key2
的属性
这就是JS属性速记符号的工作原理
您需要obj1[key2]
您还将返回
obj1
;不确定输出
用于什么。当您编写obj1.key2
时,您正在设置一个名为key2
的属性
这就是JS属性速记符号的工作原理
您需要obj1[key2]
您还将返回
obj1
;不确定输出
的用途。您正在硬编码属性名key2
。它需要像obj1[key2]
那样分配。Javascript允许您动态添加属性,属性名称也可以在运行时确定。因此,Obj1[key2]
创建动态属性
另外,请注意,由于您使用的是操作符中的,并且没有使用Object.hasOwnProperty()
方法对属性进行额外检查。对于带有原型链的对象,您可能会得到不同的结果,而这些结果有时可能并不理想
var obj1={
答:1,,
b:2
};
变量obj2={
b:4,
c:3
};
功能扩展(obj1、obj2){
输出={};
用于(obj1中的var键){
用于(obj2中的var键2){
如果(键!==键2){
obj1[key2]=obj2[key2];
}
}
}
返回obj1;
}
console.log(扩展(obj1,obj2))代码>您正在硬编码属性名称key2
。它需要像obj1[key2]
那样分配。Javascript允许您动态添加属性,属性名称也可以在运行时确定。因此,Obj1[key2]
创建动态属性
另外,请注意,由于您使用的是
操作符中的,并且没有使用Object.hasOwnProperty()
方法对属性进行额外检查。对于带有原型链的对象,您可能会得到不同的结果,而这些结果有时可能并不理想
var obj1={
答:1,,
b:2
};
变量obj2={
b:4,
c:3
};
功能扩展(obj1、obj2){
输出={};
用于(obj1中的var键){
用于(obj2中的var键2){
如果(键!==键2){
obj1[key2]=obj2[key2];
}
}
}
返回obj1;
}
console.log(扩展(obj1,obj2))代码>在第15行
您正在将obj1
上的属性分配给.key2
而应该像这样分配属性obj1[key2]
。这将使用键值进行赋值,就像查找键一样
还有一种奇怪的情况是,输出
变量未使用且未定义,在我的示例中,我已将其从代码中删除
固定示例:
var obj1={
答:1,,
b:2
};
变量obj2={
b:4,
c:3
};
功能扩展(obj1、obj2){
用于(obj1中的var键){
用于(obj2中的var键2){
如果(键!==键2){
obj1[key2]=obj2[key2];
}
}
}
返回obj1;
}
延伸(obj1、obj2)
console.log(obj1)
在第15行。这将使用键值进行赋值,就像查找键一样
还有一种奇怪的情况是,输出
变量未使用且未定义,在我的示例中,我已将其从代码中删除
固定示例:
var obj1={
答:1,,
b:2
};
变量obj2={
b:4,
c:3
};
功能扩展(obj1、obj2){
用于(obj1中的var键){
用于(obj2中的var键2){
如果(键!==键2){
obj1[key2]=obj2[key2];
}
}
}
返回obj1;
}
延伸(obj1、obj2)
console.log(obj1)