javascript - JavaScript 权威指南中的对象合并函数与扩展函数完全一样吗?

标签 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 作为 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/

相关文章:

javascript - 前端测试策略?

function - 函数定义后的链式函数调用

c++ - 无法推断间接调用模板函数的类型

function - 在 Swift 2.0 中使用 reduce() 时出错

javascript - 在 JavaScript 中遍历类对象内部的字典

php - 如何使用 JavaScript PHP 和 MariaDb 验证登录表单?

javascript - 如何检测一个 Div 是否在另一个 Div 之外?

c# - 如何在不知道提前指定数量的情况下创建对象数组

javascript - JQuery:将 div 附加为 var 类

c++ - 关于c++引用的问题