我已阅读以下文章,了解如何使用拥有自己的属性阻止您枚举对象原型上定义的属性:
- How do I check if an object has a property in JavaScript?
我想我得到了这个模式的一般工作方式以及为什么要使用它,但我仍然不明白为什么,在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;
}
顺便说一下,这个功能的用途是:
它创建一个具有给定名称和属性的元素并追加 它作为子节点获得的所有进一步参数,自动转换 字符串到文本节点。
有人可以引导我完成这个特定的例子吗?
答案 0 :(得分:1)
结构for (var attr in attributes)
迭代所有可迭代属性,包括原型上的项目。
如果您只想迭代实际直接分配给对象的属性,而不是原型上的属性,那么您可以使用.hasOwnProperty()
作为您指向的代码进行过滤。该代码将跳过原型上的任何可迭代属性,并且只会迭代实际对象本身的属性。