在这个特定的例子中,为什么作者在for中使用if.hasOwnProperty..循环模式

in this particular example, why did the author use the if...hasOwnProperty in a for...in loop pattern?

本文关键字:for 模式 循环 hasOwnProperty if 为什么      更新时间:2023-09-26

我已经阅读了以下文章,介绍了使用has-owne属性如何防止您枚举对象原型上定义的属性:

-MDN拥有属性

-如何检查对象是否具有JavaScript中的属性?

-for。。和hasOwnProperty

我想我知道这个模式通常是如何工作的,以及你为什么要使用它,但我仍然不明白为什么在Eloquent Javascript的CH 19的以下代码中,作者选择使用这个模式。。。

function elt(name, attributes) {
  var node = document.createElement(name);
  if (attributes) {
    for (var attr in attributes)              
      if (attributes.hasOwnProperty(attr))       // <----------------
        node.setAttribute(attr, attributes[attr]);
  }
  for (var i = 2; i < arguments.length; i++) {
    var child = arguments[i];
    if (typeof child == "string")
      child = document.createTextNode(child);
    node.appendChild(child);
  }
  return node;
}

顺便说一下,这个功能的用途是:

它创建一个具有给定名称和属性的元素,并附加它作为子节点获得的所有其他参数,自动转换字符串到文本节点。

有人能介绍一下这个特殊的例子吗?

结构for (var attr in attributes)迭代所有可迭代属性,包括原型上的项。

如果您只想迭代实际直接分配给对象的属性,而不想迭代原型上的属性,那么您可以像所指向的代码一样使用.hasOwnProperty()过滤掉它们。该代码将跳过原型上的任何可迭代属性,只迭代实际对象本身的属性。