对象合并函数从《权威指南》到JavaScript,其作用与扩展函数完全相同?
我在《JavaScript权威指南》中的“对象”一章,我正在讨论Flanagan共享的一些对象实用程序函数 这两个函数是extend()和merge()函数:对象合并函数从《权威指南》到JavaScript,其作用与扩展函数完全相同?,javascript,function,object,utility,Javascript,Function,Object,Utility,我在《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]; } ret
/* 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}
有人知道为什么这些函数的行为是相同的吗?我已经查看了堆栈溢出一段时间,但找不到任何具体解决此行为的方法。您在
merge
中有一个输入错误,应该是o.hasOwnProperty(prop)
(括号而不是括号):
我只是在玩它,看不见它-很好的发现:)@go oleg非常感谢,它修好了!我想我是因为关注细节而不是批判性思维而得到分数的——这就是书中的写法
function merge(o, p) {
for(prop in p) {
if (o.hasOwnProperty(prop)) continue;
o[prop] = p[prop];
}
return o;
}