有件奇怪的事情。我已经为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中的数组也是对象。我的问题是为什么这个方法变成了一个索引,而不是保持为一个方法。这对我来说毫无意义...
defineProperty
。 - yuvienumerable: false
,Object.keys(l)
返回['0','1']
甚至在这里 - 为什么? - yuviObject.keys
不使用原型链。所有这些东西都在 MDN 上有很好的文档记录。 - Dagg NabbitObject.keys
不会像for...in
一样经过相同的过程,否则你将得到相同的结果。我想知道那个过程是什么(或者那是在代码的非常低层次上发生的吗?) - yuvi