在阅读了一些帖子和文档后,我仍然不清楚可枚举属性的真正定义。接下来,让我展示给你我困惑的地方:
我创建了一个构造函数并添加了一个原型。
var myAlphabet = function() {
this.c = 5
this.d = 6
}
myAlphabet.prototype = {
e:7
}
现在我使用new关键字创建了一个名为myAlphabet的新实例。
var myObject = new myAlphabet();
使用for-in循环,我想控制台记录myObject实例中所有键(不包括原型中的键)。
for( key in myObj){
console.log(key);
}
这将记录日志:
'c'
'd'
'e'
根据for..in循环的文档:
for..in语句按任意顺序遍历对象的可枚举属性。对于每个不同的属性,可以执行语句。
这让我相信原型是一个可枚举属性。但阅读“可枚举属性”的文档时,我们可以看到:
属性的所有权是通过属性是否直接属于该对象而不是其原型链来确定的。
因此,早期创建的原型不直接在myObject实例上,而是包含在原型链中。当我遍历每个键时为什么会包括它?
if(myObj.hasOwnProperty(key))
。 - A1rPunObject.defineProperty
。 - juvian