关于覆盖的一些问题。

关于覆盖的一些问题。

<!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>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。

两次的结果都是输出b,在js的原型中。属性的搜索顺序是从实例属性开始,没有,再沿着原型链找到原型对象。再没有,就返回未定义。因此是实例化的对象的私有属性会覆盖掉原型上的属性,因此调用name会调用实例化对象的私有属性 name = b。

祝学习愉快!

  • ssszz 提问者 #1
    老师,用this定义的属性和prototype定义的属性是不一样的吗? 若定义相同的属性,先看this在看prototype?
    2019-03-22 18:16:37
  • Steve007 回复 提问者 ssszz #2
    同学,你好。用this定义的属性和prototype定义的属性是不一样的,用this定义的属性是它自身的私有属性,而prototype定义的属性是它原型上的属性。若定义相同的属性,先看this再看prototype。 祝学习愉快!
    2019-03-22 18:37:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师