どのようにjsの中の継承を書きますか?
2280 ワード
原型引継ぎ
jsにはプロトタイプの概念があります.プロトタイプによって継承ができます.関数をアニマルと定義し、そのプロトタイプにsayHello関数を定義します.新しいオブジェクトdogを生成します.
クラス継承
クラス継承と原型継承は似ています.
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の方法がない場合、その父親に戻ってこの方法を探します.