我在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返回为对象{a = 4,b = 5,c = 6} 我认为x的匹配属性不应该被覆盖。我也试过
extend(x, y);
将x返回为对象{a = 4,b = 5,c = 6}
有没有人知道为什么这些功能的行为相同?我已经浏览了Stack Overflow一段时间,但却无法找到解决此问题的任何内容。
答案 0 :(得分:2)
merge
中有一个拼写错误,应为o.hasOwnProperty(prop)
(parens而不是括号):
function merge(o, p) {
for(prop in p) {
if (o.hasOwnProperty(prop)) continue;
o[prop] = p[prop];
}
return o;
}