原型继承问题

原型继承问题

这个例子有点疑问,eat方法并不在Animal.prototype上,为什么能被继承到呢?

function Animal(){

this.eat=function(){

console.log('eat');

}

}


function Dog(){

this.bark=function(){console.log('bark');

}

}


Dog.prototype=new Animal();

var d=new Dog();

d.eat()


正在回答 回答被采纳积分+1

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

3回答
Edward666 2020-03-30 18:47:53

ES5实现类的继承建议你不要学老师的那种继承方式,有很多缺点的。我给看一个最佳的继承实现方式

// 最好的方法,最理想的方法 寄生组合式继承// 解决了两次调用父类构造函数问题function Person_1(name, age) {
    this.name = name;
    this.age = age;
    this.action = ['speak', 'run', 'eat'];
    console.log('我被调用了');}Person_1.prototype.say = function () {
    console.log(`my name is ${this.name} and I am ${this.age} years old!`);};function Student_1(name, age, score) {
    Person_1.call(this, name, age);  // 借用构造函数, 第一次调用父类构造函数
    this.score = score;}Student_1.prototype = Object.create(Person_1.prototype);Student_1.prototype.constructor  = Student_1;Student_1.prototype.showScore = function () {
    console.log(`my score is ${this.score}`);};


好帮手慕言 2019-08-28 19:31:03

同学你好,可以这样理解。

new Animal()是Animal实例化出来的对象,所以new Animal()有Animal里定义的方法。打印一下看结果:

http://img1.sycdn.imooc.com//climg/5d6664bf0001de0d04180060.jpg

控制台:

http://img1.sycdn.imooc.com//climg/5d6664d300012fb003160151.jpg

Dog.prototype = new Animal();从上面的截图中可以看到new Animal();上有eat方法的。所以Dog的原型上就继承了eat方法。因此d就可以调用。

同学可以再理解下。

如果帮助到了你,欢迎采纳~祝学习愉快~

好帮手慕言 2019-08-28 11:05:51

同学你好,Dog.prototype=new Animal(); 也就是Dog的原型指向Animal的实例化对象。 而Animal的实例化对象上是有eat方法的,所以d可以调用eat哦。

同学可以再理解下,如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 fangfangfang2019 #1
    没看懂回复,Dog.prototype=new Animal()的意思不是Dog.prototype.__proto__=Animal.prototype吗?我看了Animal.prototype上是没有eat方法的,Dog的原型指向Animal的实例化对象是什么意思呢?
    2019-08-28 17:17:51
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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