子供の靴は、我々が今日のjs承継、相続、基本よりも通常少ない開発について話しますが、面接はテストしていない、私は、お願いしたいと思い、これは人々が正しいことをしているのですか?
それがあるのでまあ、社会主義のコアバリューの下で、我々は、今日簡単に継承されたjsの話をしなければならないこと、オブジェクト指向プログラミングの非常に重要な側面
継承されているものの最初の定義:
継承によって、オブジェクトBをオブジェクトには、直接オブジェクトBのすべてのプロパティとメソッドを持つことができます
6つの共通の統合的なアプローチがありますが、私たちは、単にのは、6つの方法のこのサブクラスを見てみましょう今、それを言う、今日回すことが、大きく分けることができる三つのカテゴリー
最初のカテゴリ:一般的なカテゴリー
そのような継承された方法は、実装が容易、簡単である特徴を有している二種類の合計。
1、プロトタイプ継承チェーン
キーポイント:親のサブタイプのプロトタイプは、オブジェクトのインスタンスを入力し、サブクラスは親クラスのプロパティとメソッドを継承私有財産であると親クラスのpublicメソッドは、そのパブリックプロパティとメソッドとして持っています
短所:
-
-
多重継承を達成することができません
-
プロトタイプオブジェクトからすべてのプロパティは、すべてのインスタンスで共有されます
-
あなたは、サブクラスのインスタンスを作成する場合、親クラスのコンストラクタにパラメータを渡すことはできません
-
でサブクラスにプロパティとメソッドを追加するにはでなければなら
Student.prototype = new Person()
ないコンストラクタに、後に行わ
-
コンストラクタの継承を借りる2、
キー:サブタイプユニバーサルコンストラクタ呼び出し()は、親の型のコンストラクタを呼び出します
短所:
-
-
インスタンスの例としては、親クラス、サブクラスの唯一のインスタンスではありません
-
例としては、親クラスの属性とメソッドを継承することができ、試作品は、プロパティとメソッドを継承することはできません
-
多重化機能を実現することができない、各サブクラスのコピーは、親クラスのインスタンス機能は、パフォーマンスに影響を与えています
-
第二のカテゴリー:学習クラスの進化
このような継承されたメソッドは、上記の2つの方法が一般的なタイプであれば、その後、私たちは紹介したい次は少し身体の他の種類を学習することによって、その進化のタイプの欠如、および変換ということで、より多くの牛です3種類の合計を、
1、原型链+借用构造函数的组合继承
关键点:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用
缺点:调用了两次父类构造函数,生成了两份实例
评价: 你看他就很牛了,他把上面的两种普通类型结合了,形成了自己独特的表现
2、(原型链+借用构造函数的组合继承)plus
关键点:这种方式通过父类原型和子类原型指向同一对象,子类可以继承到父类的公有方法当做自己的公有方法,而且不会初始化两次实例方法/属性,避免的组合继承的缺点。
缺点:没办法辨别是实例是子类还是父类创造的,子类和父类的构造函数指向是同一个。
评价:这个类型就更厉害了,如果上一个类型是iPhone8,那这个就是8plus,他是在上一个版本的基础上,又自我进化了,修补了初始化两次实例方法和属性这个缺点。
3、(原型链+借用构造函数的组合继承)s
关键点:借助原型可以基于已有的对象来创建对象,var B = Object.create(A)
以A对象为原型,生成了B对象。B继承了A的所有属性和方法。
缺点:几乎进化到了完美形态!
评价:学习是永无止境的,苹果公司也继8plus之后推出了更强的手机系列,8s,又是一次进化;
第三类:天赋型
我们要承认一件事,世上真的有天赋这个东西,接下来我们要讲的天赋型就属于这种,它不同于基础型和学习进化型,他是一种独树一帜的方式,而赋予它天赋的则来自ES6的class关键字,仅有一种;
1、ES6中class 的继承
关键点:通过extends关键字实现继承
缺点:它在有着以上所有优点的前提下,存在着一个缺点,类似于慧极必伤,那就是并不是所有的浏览器都支持class关键字。
OK,开始敲黑板,以上三类六种就是我们今天要说的js继承方法,当然三类是我胡诌的,只是希望能加深大家的理解;
参考文章
-
-
JS实现继承的几种方式
-
JavaScript深入之继承的多种方式和优缺点
-
JavaScript常见的继承方式
-
阮一峰ES6入门之class的继承
-
JavaScript 常见的继承方式
-