为了账号安全,请及时绑定邮箱和手机立即绑定

求高手回答原型继承的问题

求高手回答原型继承的问题

眼眸繁星 2018-11-13 17:19:57
function Parent(firstName,color){    this.firstName = firstName;    this.color = color;    this.showName = function (){        console.log("我家姓氏:"+this.firstName);    }}Parent.prototype.showAll=function(){    console.log("姓:"+this.firstName+"\n"+"喜爱的颜色:"+this.color);}function Child(myName,age,firstName,color){    this.myName = myName;    this.age = age;     Child.prototype=Parent.prototype;    Parent.call(this,firstName,color);}/*Child.prototype=Parent.prototype;*/var c = new Child("帅",23,"孙","粉色");var d=new Parent("孙","粉色");d.showAll();//姓:孙            //喜爱的颜色:粉色c.showAll();//error c.showAll is not a functioncall对象冒充为什么this不能获得构造函数Parent的原型?还有Child.prototype=Parent.prototype;写在Child函数里不行,为什么拿出来写在window环境就可以?
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

题主:代码可以再捋一捋

Child.prototype=Parent.prototype    // Parent.prototype指向的是Object

Child.prototype=Parent    //该是这样吧

第一个问题:this不能获得构造函数Parent的原型

function Child() 定义一个函数,使用var c = new Child() this的指向为对象c,就没指向 Parent,不过你使用c.showName(),还是能获取到的,因为原型继承.

第二个问题:写在Child函数里不行,为什么拿出来写在window环境就可以?

写在函数里面也行的, this.prototype=Parent;
一个new做了以下几件事情:

  1. 创建一个新的对象

  2. 查找Childprototype上的所有方法、属性,复制一份给创建的对象

  3. 将构造函数Child内部的this指向创建的对象

  4. 创建的对象的__proto__指向Childprototype

  5. 执行构造函数

  6. 返回新创建的对象给变量c

写在内部就是在第五部写入,写在外部是在第四部写入,故与内外无关。


查看完整回答
反对 回复 2018-12-05
  • 1 回答
  • 0 关注
  • 455 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号