假设我已经向 Array 类添加了一些原型(prototype)方法:
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;
}
然后我创建一个关联数组并尝试遍历它的键:
var arr = new Array();
arr['One'] = 1;
arr['Two'] = 2;
arr['Three'] = 3;
for(var key in arr)
alert(key);
这将返回五个项目:
-One -Two -Three -containsKey -containsValue
但我只想要(预计?)三个。我接近这个错误吗?有没有办法“隐藏”原型(prototype)方法?还是我应该做些不同的事情?
最佳答案
您可以通过使原型(prototype)方法不可枚举来从另一端获得所需的结果:
Object.defineProperty(Array.prototype, "containsKey", {
enumerable: false,
value: function(obj) {
for(var key in this)
if (key == obj) return true;
return false;
}
});
如果您可以控制方法定义,特别是如果您无法控制其他人如何调用您的代码,这通常会更好,这是库代码开发中的常见假设。
关于Javascript:在for循环中隐藏原型(prototype)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107681/