【发布时间】:2014-10-17 16:57:07
【问题描述】:
在阅读了一些帖子和文档后,我仍然不清楚可枚举属性的真正定义。继续前进,让我告诉你我在哪里感到困惑:
我创建了一个构造函数并添加了一个原型。
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 语句遍历一个可枚举的属性 对象,以任意顺序。对于每个不同的属性, 可以执行语句。
这让我相信原型是enumerable property。但是阅读Enumerable properties的文档
属性的所有权由属性是否直接属于对象而不属于其原型链来确定。
所以前面创建的原型并不是直接在myObject的实例上,而是包含在原型链中。为什么循环遍历每个键时都包含这个?
【问题讨论】:
-
仅获取 myObj 的属性而不是原型,请执行
if(myObj.hasOwnProperty(key))。 -
所以你不想在输出中包含'e'?
-
如果你想为 myAlphabet 定义一个属性而不是在 myObject 上,你可以使用
Object.defineProperty
标签: javascript