这里的继承只讲了两个最基本的继承方式?

来源:6-5 构造继承

_1973

2019-05-21 23:59:00

原型链和借用构造函数继承这两个实现继承的方式大部分都不能够单独使用的,因为有各自的局限性;我以为后面还会引出组合继承等一些优化的继承方式呢?结果就讲完了!!!

写回答

2回答

好帮手慕星星

2019-05-23

你好,非常抱歉给你带来不好的学习体验。

首先继承在实际开发中用到的不是很多,而在这是小白入门,所以讲解的都是两种基础继承,避免同学们难以理解。然后实际开发中用es6中的class继承是比较多的,在后面课程中有class的讲解,到后面可以深入学习一下,所以在这没有讲解组合继承。

同学的建议我们也会接受,会进行综合的考量,从实际出发,然后再进行优化。

祝学习愉快!

0

好帮手慕星星

2019-05-22

你好,视频中继承方式确实讲解的是两种基础的,而组合继承是这两种继承方式的组合,可以给你举一个例子:

http://img.mukewang.com/climg/5ce4c6300001692505420454.jpg

使用call方法继承父类Parent的属性,然后再使用原型方式继承父类原型的方法,这样child就拥有了父类的属性和方法。但是这样有一个不足之处,call()方法已经拿到父类的所有属性,使用原型继承的时候会再拿一次,如下:

http://img.mukewang.com/climg/5ce4c6d80001d88003660185.jpg

虽然子类属性会覆盖掉原型上的属性,但是重复拿内容不太好,可以封装一个方法解决这个问题:

http://img.mukewang.com/climg/5ce4c7600001676604660166.jpg

获取到传入函数的原型,在调用时传入父类函数,如下:

http://img.mukewang.com/climg/5ce4c7e6000102ad04720037.jpg

最后还要注意的是 ,使用原型继承会使子类的构造器指向父类Parent ,所以我们需要用如下方法让child原型的构造器指向child:

http://img.mukewang.com/climg/5ce4c9070001a78c05030029.jpg

一个较完善的继承完成了,完整代码:

http://img.mukewang.com/climg/5ce4c9370001efa705970673.jpg

同学反馈的问题我们也会进行整体评估,如果有问题也会进行相应的调整。

祝学习愉快!

0
h1973
h 老师您说的这个其实就是寄生组合式继承,集寄生式继承和组合继承的优点于一身;因为组合继承调用父类型的构造方法两次,这样的缺点就是在子类型的原型上创建不必要的属性,造成内存的浪费; 可以这样,直接把你上面操作封装成一个方法就可以一步到位了了 //寄生组合式继承 function inheritPrototype(father,child) { var prototyper = Object.create(father.prototype); prototyper.constructor = child; child.prototype = prototyper; } 直接调用这个函数,把相关的父类型,子类型传进去,就形成了继承的关系; 这是实现基于类型继承最有效的方式; 我想说的是我花了这几百块买的这套课程,这么重要的概念居然没讲??? 天直到我学到后面会漏掉什么概念没讲,又要跑回来补。
h019-05-22
共1条回复

0 学习 · 14456 问题

查看课程