【发布时间】:2014-09-14 09:20:41
【问题描述】:
这里我有两个构造函数,分别是 First 和 Second。
First 继承自 Second。First 在其原型链上也有一个 hair 属性。
一个新创建的对象 tom 应该是 First 构造函数的一个实例,它还有一个用户定义的属性,称为 nail。
如果我想使用 for...in 循环记录 tom 对象的所有可枚举属性,它只显示名称、指甲和年龄。但是头发属性似乎从其原型链中消失了。
为什么头发属性从原型链中消失了?怎么找回来??
<html>
<body>
<script>
function First(name){
this.name=name;
}
First.prototype.hair='black';// tom.hair gets me undefined
function Second(){
this.age=1;
}
First.prototype=new Second();
var tom=new First('tom');
tom.nail='sharp';// added property to tom
for(var i in tom){
console.log(i);
}
console.log(tom.hair);
</script>
</body>
</html>
【问题讨论】:
-
您可能希望通过调用 Second.call(this) 来重新使用 Second 构造函数并使用 Object.create 而不是创建 Second 的实例以用作 First.prototype,因为现在您正在混淆共享和实例特定成员(年龄)在此处获取更多信息:stackoverflow.com/questions/16063394/…
标签: javascript