我试图用一个函数来扩展 Javascript 的对象类型,该函数检索属于该对象的所有属性名称(基本上是 PHP 的array_keys()
函数对关联数组起作用)。
Object.prototype.keys = function() {
var a = [];
for (var property in this) {
a.push(property);
}
return a;
};
var a = {a:1,b:2,c:3,d:4};
alert(a.toSource());
var b = a.keys();
alert(b.toSource());
当变量b
收到警报,我期待看到["a","b","c","d"]
,相反我看到的是["a","b","c","d","keys"]
.
看起来 for-in 循环包含原型keys()
功能。
在进行原型设计时是否可以避免这种行为,或者我应该避免一起进行原型设计?
啊,扩展内置组件的乐趣。for..in
检查正在迭代的对象的整个原型链。
你需要的是(我相信现在这是事实)是与hasOwnProperty https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty在你的循环中:
for (var property in this) {
if (this.hasOwnProperty(property)) {
a.push(property);
}
}
hasOwnProperty
确保您只获得直接在对象上定义的属性(即not沿着原型链向上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)