JavaScript的权威指南中的对象合并功能与扩展功能完全一样吗?

时间:2014-08-13 00:55:32

标签: 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];
  }
  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一段时间,但却无法找到解决此问题的任何内容。

1 个答案:

答案 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;
}