Nic*_*ina 45 javascript arrays loops for-loop prototype
所以我想说我已经在Array类中添加了一些原型方法:
Array.prototype.containsKey = function(obj) {
for(var key in this)
if (key == obj) return true;
return false;
}
Array.prototype.containsValue = function(obj) {
for(var key in this)
if (this[key] == obj) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个关联数组并尝试循环它的键:
var arr = new Array();
arr['One'] = 1;
arr['Two'] = 2;
arr['Three'] = 3;
for(var key in arr)
alert(key);
Run Code Online (Sandbox Code Playgroud)
这会返回五个项目:
-One -Two -Three -containsKey -containsValue
但我想(期待?)只有三个.我接近这个错吗?有没有办法"隐藏"原型方法?或者我应该采取不同的做法?
abb*_*bbr 51
通过使原型方法不可枚举,您可以从另一端获得所需的结果:
Object.defineProperty(Array.prototype, "containsKey", {
enumerable: false,
value: function(obj) {
for(var key in this)
if (key == obj) return true;
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如果您可以控制方法定义,这通常会更好,特别是如果您无法控制其他人如何调用您的代码,这是库代码开发中的常见假设.
Kir*_*tan 49
你可以使用JavaScript的hasOwnProperty方法在循环中实现这一点,如下所示:
for(var key in arr) {
if (arr.hasOwnProperty(key)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
参考:这个YUI博客文章.
| 归档时间: |
|
| 查看次数: |
16575 次 |
| 最近记录: |