继承--没看懂

继承--没看懂

https://www.cnblogs.com/ranyonsue/p/11201730.html

1.构造函数继承:2句话没看懂

无法实现构造函数的复用。(每次用每次都要重新调用)
每个新实例都有父类构造函数的副本,臃肿

2.组合模式继承:1句话没看懂

子类的构造函数会代替原型上的那个父类构造函数

3.四五六什么时候会讲解到

正在回答

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

3回答

同学你好,先看例子

 <script>
    //父类:人
    function Person() {
        this.head = '脑袋瓜子';
        this.emotion = ['喜', '怒', '哀', '乐']; //人都有喜怒哀乐
    }
    //将 Person 类中需共享的方法放到 prototype 中,实现复用
    Person.prototype.eat = function() {
        console.log('吃吃喝喝');
    }
    Person.prototype.sleep = function() {
        console.log('睡觉');
    }
    Person.prototype.run = function() {
        console.log('快跑');
    }
    //子类:学生,继承了“人”这个类
    function Student(studentID) {
        this.studentID = studentID;
        Person.call(this); // 第二次调用Person()
    }
    Student.prototype = new Person(); // 第一次调用Person()
    Student.prototype.constructor = Student; //将 Student 原型对象的 constructor 指针重新指向 Student 本身
    var stu1 = new Student(1001);
    console.log(stu1.emotion); //['喜', '怒', '哀', '乐']
    stu1.emotion.push('愁');
    console.log(stu1.emotion); //["喜", "怒", "哀", "乐", "愁"]
    var stu2 = new Student(1002);
    console.log(stu2.emotion); //["喜", "怒", "哀", "乐"]
    stu1.eat(); //吃吃喝喝
    stu2.run(); //快跑
    console.log(stu1.constructor); //Student
    </script>

在第一次调用Person构造函数时,Person.prototype会得到两个属性:head和emotion,他们都是Person的实例属性。只不过这个时候位于Student的原型中,当调用Student构造函数时,又会调用一次Person构造函数,这一次又在新对象上创建了实例属性head和emotion,于是,这两个属性就屏蔽了原型中的两个同名属性。结果是,有两组head和emotion属性,一组在Student的实例上,一组在Student的原型上。结合代码再理解一下。

祝学习愉快!

卡布琦诺 2020-01-05 15:03:16

同学你好,老师是希望你提问的时候,能够截图标注是哪句话,否则,一大篇博客,老师得从头一个字一个字的匹配同学说的问题,这样效率会很慢,同学也就很难得到快速的解答,现关于同学的问题解答如下:

1、课程中讲解到的知识点

(1)原型链继承https://class.imooc.com/lesson/791#mid=19904

(2)构造函数继承https://class.imooc.com/lesson/791#mid=19908

(3)寄生组合式继承因为需要使用call和apply方法,因此在call和apply的方法中会涉及一些https://class.imooc.com/lesson/791#mid=19912

(4)原型式继承和寄生式继承因为无法实现复用,不符合企业代码开发的标准,因此没有讲解。

2、构造函数继承:2句话没看懂

(1)无法实现构造函数的复用。(每次用每次都要重新调用)

(2)每个新实例都有父类构造函数的副本,臃肿

解析:这种形式的继承,每个子类实例都会拷贝一份父类构造函数中的方法,作为实例自己的方法, 每个实例都拷贝一份,占用内存大,尤其是方法过多的时候,函数复用就无从谈起,本来用prototype 就是解决复用问题的。这种形式的继承,方法都作为了实例自己的方法,当需求改变,要改动其中的一个方法时,之前所有的实例,他们的该方法都不能及时作出更新,只有后面的实例才能访问到新方法。

3、组合模式继承:1句话没看懂

(1)子类的构造函数会代替原型上的那个父类构造函数

解析:关于这个问题,先来看一个例子

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

上述代码通过SuperType.call(this, name);继承父类型的属性,通过SubType.prototype = new SuperType();继承父类型的方法。但是可以看到,以上代码中,在继承方法的时候实际已经继承了父类型的属性,只不过此时对于引用类型属于共享的,因此在子类型的构造函数内再次调用父类型的构造函数,从而继承了父类型的属性而去覆盖了原型中所继承的属性(子类的构造函数会代替原型上的那个父类构造函数)

如果我的回答帮助了你,希望采纳,祝学习愉快!

  • 提问者 迷失的小麦 #1
    第二个解释能不能通俗一点,真的没看懂,子类的构造函数会代替原型上的那个父类构造函数
    2020-01-05 16:18:03
卡布琦诺 2020-01-05 11:56:58

同学你好,建议同学详细描述是课程视频或者是课程教辅资料区的教辅中的哪句话没看懂,另外,建议同学跟着视频的进度和步伐来学习,每一门课程都是一线讲师精心安排、设计的。

祝学习愉快!

  • 提问者 迷失的小麦 #1
    这个链接老师看了吗?这个总结的是不是老师不会在视频中讲解
    2020-01-05 13:32:28
  • 卡布琦诺 回复 提问者 迷失的小麦 #2
    视频中会讲解相关的内容,但是叫法可能会不相同,根据同学的学习情况,外网各类博客,对于技能点叫法以及解释各不相同,也不是全然是专业的解释,因此建议同学按照视频的规划学习,避免因为看的多,学的杂,从而导致学而不精,另外,本站禁止粘贴外网链接,祝学习愉快!
    2020-01-05 13:40:13
  • 提问者 迷失的小麦 #3
    难道我的问题提的不清晰吗
    2020-01-05 13:47:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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