这里我有两个构造函数说第一和第二。
首先从Second.First继承其原型链上的头发属性。
新创建的对象说tom应该是First构造函数的实例,它还有一个名为nail的用户定义属性。
如果我想使用for ... in循环记录tom对象的所有可枚举属性,它只显示name,nail和age.But hair属性似乎从其原型链中消失。
为什么头发属性从原型链中消失了?我该怎么办呢?
<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>
答案 0 :(得分:2)
答案 1 :(得分:1)
First.prototype.hair
之前宣布
First.prototype
当时,被Second
构造的对象实例覆盖
First.prototype=new Second();
被调用。要将hair
属性添加到First
的原型中,请在分配通过调用Second
创建的对象实例后将其添加到原型中,即
function First(name){
this.name=name;
}
function Second(){
this.age=1;
}
First.prototype=new Second();
// add to prototype after overwriting/assigning prototype above
First.prototype.hair='black';
var tom=new First('tom');
tom.nail='sharp';
for(var i in tom){
console.log(i);
}
答案 2 :(得分:1)
问题是您在hair
的默认原型上设置了First
属性,然后将其替换为新原型,这意味着您的原始文件已丢失。如果你重新排序这样的语句,它将起作用:
function First(name){
this.name=name;
}
function Second(){
this.age=1;
}
First.prototype=new Second();
First.prototype.hair='black'; // this works now!
var tom=new First('tom');
tom.nail='sharp';// added property to tom
for(var i in tom){
console.log(i);
}
console.log(tom.hair);