这是奇怪的事情。我为object
定义了一个名为getSize
的自定义原型方法:
if (!Object.prototype.getSize) {
Object.prototype.getSize = function() {
var size = 0, key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
};
}
它为您提供对象的大小。到目前为止很简单吧? 这是我感到困惑的地方:
var l = ["foo", "bar"]
for (var i in l) {
console.log(i);
}
结果是:
0
1
getSize
为什么getSize
还有
修改的 我知道javascript中的数组也是对象。我的问题是为什么方法变成了索引,而不是保留方法。这对我没有任何意义......
答案 0 :(得分:4)
因为getSize
是一个可枚举的属性,你可以将它定义为不可枚举:
Object.defineProperty(Object.prototype, 'getSize', {
enumerable: false,
value: function() {
var size = 0, key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
}
});
但你也可以这样做:
Object.keys(object).length;
答案 1 :(得分:3)
因为["foo", "bar"]
也是JavaScript中的对象。尝试在控制台中运行typeof ["foo", "bar"]
。它会向您返回"object"
。所以你也扩展了Arrays方法。完成此操作后,您还需要在所有hasOwnProperty
次迭代中检查for..in
。
这适用于JavaScript中的所有global objects