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

JavaScript中关于重写原型的问题,是如何指向的的?

JavaScript中关于重写原型的问题,是如何指向的的?

HUX布斯 2019-04-19 16:12:49
functionPerson(){}Person.prototype={constructor:Person,name:"TIMY",age:77,job:"NEWS",sayName:function(){alert(this.name)}};varfriend=newPerson();friend.sayName();//输出'TIMY'而functionPerson(){}varfriend=newPerson();Person.prototype={constructor:Person,name:"TIMY",age:77,job:"NEWS",sayName:function(){alert(this.name)}};friend.sayName();//error书上说,“重写整个原型后,构造函数与最初的原型就切断了联系,而实例的指针仅指向原型,而不指向构造函数”。我不明白,重写后的原型中有sayName()这个方法,为什么调用不到,请问应该怎么理解这句话?上面的两个函数为什么一个可以输出,一个是error?
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

楼上说了很多。。。。其实问题的核心只有一点就算你重写构造函数的原型后,实例的指针仍然指向其当初构造函数的原型你进行重写后你新原型的constructor属性指向Person,但是实例friend指向的原型仍然为Object.prototype即friend的[[prototype]]隐式属性仍然为Object.prototype你重写了构造函数的原型不等于实例也会和构造函数一起改变相应的指针要知道关键字new才是进行一系列原型传递的信号,你有兴趣可以看看
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 459 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信