我正在阅读《JavaScript 权威指南》中的“对象”一章,我正在研究 Flanagan 分享的一些对象实用函数。
有问题的两个是 extend() 和 merge() 函数:
/* Copy enumerable props of p to o, and return o. */
/* Same name props, o is overwritten */
function extend(o, p) {
for (prop in p) {
o[prop] = p[prop];
}
return o;
}
/* Copy the enumerable props of p to o, and return o.
/* Same name props, o's property is left alone. */
function merge(o, p) {
for(prop in p) {
if (o.hasOwnProperty[prop]) continue;
o[prop] = p[prop];
}
return o;
}
为了查看不同函数的效果,我尝试了:
var x = {
a: 1,
};
var y = {
a: 4,
b: 5,
c: 6
};
merge(x, y);
返回 x 作为 Object { a=4, b=5, c=6} 我认为 x 的匹配属性不应该被覆盖。我也试过了
extend(x, y);
返回 x 作为对象 { a=4, b=5, c=6}
有没有人知道为什么这些函数的行为相同?我已经查看了 Stack Overflow 一段时间,但找不到任何具体解决此行为的内容。
最佳答案
你在 merge
中有错字,应该是 o.hasOwnProperty(prop)
(括号而不是方括号):
function merge(o, p) {
for(prop in p) {
if (o.hasOwnProperty(prop)) continue;
o[prop] = p[prop];
}
return o;
}
关于javascript - JavaScript 权威指南中的对象合并函数与扩展函数完全一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276460/