两种继承方法 的区别?

两种继承方法 的区别?

 function person(name,age){

        this.name = name;

        this.age = age;

        this.say = function(){

        alert('he')

        };

        }

        person.prototype.walk = function(){

        alert('-----walk');

        }

        // 构造继承

        function student(name,age){

        this.newMethod = person;

        this.newMethod(name,age);

        }

        // 原型继承

        function teacher(){}

        teacher.prototype = new person("李",20);

        var student = new student("张",15)

        var teacher = new teacher();

        student.walk(); // walk方法无效

        teacher.walk(); // walk方法有效

为什么一个可以使用walk方法,一个不行

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

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

1回答
好帮手慕星星 2018-11-12 17:48:37

1、构造继承中将整个person对象放在了student的newMethod属性上,如下:

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

你在实例化student,也就是在new student的时候传入的参数作为了student的属性,并不是在person中传入的。所以可以在newMethod属性中调用:

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

2、原型继承中,person直接挂载到了teacher的原型中:

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

所以将teacher实例化之后,直接调用walk方法即可。

祝学习愉快!

  • 见信 #1
    那老师,问题来了,是不是构造继承,继承的只是它的特权属性特权方法,而prototype上的东西,都无法继承到,如你上面所写,我要调用它的原形上的方法,我还得通过它的原形来调用,那这到底算不算继承了,还是说是继承了它的原形?
    2019-03-17 03:21:31
  • 原型的属性和方法是可以继承到的,继承到了实例化对象的原型上,所以需要通过prototype去调用。
    2019-03-17 08:48:44
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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