どのようにjsの中の継承を書きますか?

2280 ワード

原型引継ぎ
jsにはプロトタイプの概念があります.プロトタイプによって継承ができます.関数をアニマルと定義し、そのプロトタイプにsayHello関数を定義します.新しいオブジェクトdogを生成します.
function Animal(name){
    this.name = name
}
Animal.prototype.sayHello = function() {
    console.log('hello')

}
var dog = new Animal('dog')

console.log(dog)
//{name: "dog"}
Dgを印刷して現在のdogに戻すのはオブジェクトです.他の方法はありません.しかし、dogオブジェクトでsayHello関数を使うことができます.
dog.sayHello()
//hello
普通の関数にnewを加えると、構造関数となります.構造関数のプロトタイプ属性はそのプロトタイプを指します.new+コンストラクターはインスタンスオブジェクトを生成します.このオブジェクトは__proto__属性もプロトタイプを指します.インスタンスオブジェクトがある方法を呼び出すと、在自の属性の中から検索されます.もしなかったら、__proto__属性によってプロトタイプに検索します.このようにプロトタイプチェーンによって継承が可能です.
クラス継承
クラス継承と原型継承は似ています.
class Animal {
    constructor(){
        console.log('  class     ')
    }
    sayHello(){
        console.log('hello')
    }
}

class Dog extends Animal {
    constructor(name){
        super()
        this.name = name
    }
}

var dog = new Dog('dog')
console.log(dog)
//{name: "dog"}

dog.sayHello()
//'hello'
classの中のcontructorは構造関数を表していますが、他はすべて原型の中の属性です.Dogはextendsのキーワードを通じてAnimal.dogから継承されました.dogはDodgの例です.dogはsayHelloの方法がない場合、その父親に戻ってこの方法を探します.