コンストラクション関数継承とclass継承
4606 ワード
コンストラクタ継承
1、サブクラスはapplyメソッドまたはcallメソッドでthisを親に向ける
jsコード
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
Parent.apply(this, [name, age]) // apply call this
}
このメソッドは親のプロパティを継承しますが、親プロトタイプのメソッドは継承されません.
2、親インスタンスオブジェクトを子プロトタイプに割り当てる
jsコード
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
}
Son.prototype = new Parent() //
Son.prototype.constructor = Son // ,
これは親プロトタイプメソッドを継承しますが、親プロパティは継承されません.
1,2の両者を統合すると構造関数の組合せが継承され,親を継承する方法と属性が実現される.
jsコード
function Parent(name, age) {
this.name = name
this.age = age
}
Parent.prototype.init = function(){
console.log(this.name, this.age)
}
function Son(name, age) {
Parent.call(this,name,age) // apply call this
}
Son.prototype = new Parent() //
Son.prototype.constructor = Son // ,
コンビネーション継承コンビネーション継承:継承の実装中に親インスタンスが2回呼び出されたという欠点
class継承
1.extendsキーワードで親プロトタイプメソッドを継承し、superメソッドで親プロパティを継承し、
jsコード
class Parent{
constructor(name,age) {
this.name = name
this.age = age
}
init(){
console.log(this.name,this.age)
}
}
class Son extends Parent{ //extends
constructor(name,age) {
super(name,age) //super
}
}
new Son(' ',18).init()