关于覆盖的一些问题。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>5-4</title>
</head>
<body>
<script>
// function ademo(){
// this.name="a";
// this.sex="man";
// }
// function bdemo(){
// // this.name="b";
// this.sex="woman";
// }
// ademo.prototype.name="haha";
// bdemo.prototype=new ademo();
// var imb=new bdemo();
// console.log(imb.name);//1.为什么这里输出的不是haha而是a?
function ademo(){
this.name="a";
this.sex="man";
}
function bdemo(){
this.name="b";
this.sex="woman";
}
bdemo.prototype=new ademo();
var imb=new bdemo();
console.log(imb.name);//2.为什么这里输出的是b而不是a,b不应该被覆盖掉了吗?
</script>
</body>
</html>
正在回答
同学,你好。
两次的结果都是输出b,在js的原型中。属性的搜索顺序是从实例属性开始,没有,再沿着原型链找到原型对象。再没有,就返回未定义。因此是实例化的对象的私有属性会覆盖掉原型上的属性,因此调用name会调用实例化对象的私有属性 name = b。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星