有一个将给定属性应用于DOM元素的简单函数:
Object.prototype.setAttr = function(attr) { // attr is an object
for ( var i in attr )
this.setAttribute( i, atr[i] );
};
除了传递的参数之外,还有函数setAttr本身。任何人都可以解释这种行为吗?
答案 0 :(得分:3)
您需要使用hasOwnProperty来避免循环遍历原型链。
由于attr
是一个对象,并且您已将setAttr
添加到Object
的原型中,因此attr还可以通过其原型链访问setAttr
方法。
Object.prototype.setAttr = function(attr) { // attr is an object
for (var i in attr) {
if (attr.hasOwnProperty(i))
this.setAttribute(i, attr[i]);
}
};
item.setAttr({
b: 1
});
<pre id="result"></pre>
<p id="item">item</p>