クラス - 継承
継承は、サブクラスは親クラス(基底クラス)を取得することができ、財産等、新しいメソッドとプロパティを追加し、拡張することができます
extends
class P {
constructor(name,age) {
this.name = name
this.age = age
}
say () {
console.log(this.name)
}
}
class L extends P {
constructor(name,age,sex,hobby) {
super(name,age)
this.sex = sex
this.hobby = hobby
}
say() {
console.log(`${this.name} + ${this.hobby}`)
}
}
let p = new P ("xiaoming",32)
p.say() //xiaoming
let l = new L("kangkang",23,"man","唱歌")
l.say() //kangkang + 唱歌
これは、親クラスと同じ名前のメソッドのサブクラスのサブクラスの対象となります。
super()
効果
親クラスのコンストラクタ呼び出しとして
サブクラスを呼び出した後、あなたは(先頭の呼び出し上にあるように)親クラスのプロパティとメソッドを取得することができます(親クラスのコンストラクタでこれのサブクラスを再度実行するには)
ターゲットとするための方法として呼び出し
>親クラスのプロトタイプ - スーパーにアクセスするための非静的メソッド
静的メソッドでアクセス超 - >親
スーパーを呼び出すとき、この親クラスの動作は常にこのサブクラスであります
class L extends P {
constructor(name,age,sex,hobby) {
super(name,age)
this.sex = sex
this.hobby = hobby
}
say() {
console.log(`${this.name} + ${this.hobby}`)
}
}
ポリモーフィズム
同じインターフェース、異なる状況で異なることを行う(同じインターフェース、異なる症状)
class L extends P {
constructor(name,age,sex,hobby) {
super(name,age)
this.sex = sex
this.hobby = hobby
}
say() {
super.say() // 同一函数名不同结果
console.log(`${this.name} + ${this.hobby}`)
}
}
オーバーロード
別の関数のパラメータ、異なる操作
達成するために、ES5クラスの継承
function P() {
this.name = "kangang"
this.gender = 2
this.say = function () {
console.log("我是父类的哦!")
}
}
P.prototype.test = function() {
console.log(`我是原型上的test方法!!!`)
}
function C() {
P.call(this)
this.name = "xiaojun"
this.age = 21
}
var child = new C()
child.say() //我是父类的哦!
child.test() // child.test is not a function
// 上面的解决方法是
C.prototype = new P()