エス6継承

5416 ワード

1.クラスの本質について
クラスを定義
class Person{
    constructor(skin,language){
        this.skin=skin;
        this.language=language;
    }
    say(){
        console.log('I am a Person')
    }
}
classの本質はまだfunctionなので、一つのprototype属性を持っています.newが一つのクラスになったら、classのpootype属性をこの新しい対象の_u u u_uに割り当てます.プロト.を選択します.プロトタイプは関数の属性です.プロトタイプはオブジェクトインスタンスのプロトタイプです.プロトタイプは属性で、オブジェクトです.プロトタイプはオブジェクトとしてもいいです.プロトタイプはオブジェクトインスタンスのプロトタイプです.したがってプロトタイプは属性で、オブジェクトです.回りくどいです.~newオブジェクトの場合、オブジェクトにptote属性がないと理解できます.tototypeは対象を一つあげる.
console.log(typeof Person);//function
var p = new Person('unkown','unknown');
console.log(p);//Person {skin: "unkown", language: "unknown"}
console.log( __proto__==Person.prototype);//ture
newオブジェクトの場合、次のステップ(javascriptアドバンストプログラム設計から)があります.(1)オブジェクトを作成します.(2)構造関数のスコープを新しいオブジェクトに割り当てます.(3)コンストラクションのコードを実行します.(4)新しいオブジェクトに戻ります.の結果です
2.constructorの方法
constructorメソッドはデフォルトの方法であり、newオブジェクトの場合は自動的にこの方法を呼び出します.一つのクラスにはconstructorが必要です.定義がないとデフォルトで追加されます.
constructor() {}

3.クラスの継承
他の対象言語と同様に、classはextensで継承されます.1)サブ類がconstructorでない場合
class American extends Person{
    aboutMe(){
        console.log(this.skin+' '+this.language)
    }
}
サブクラスのAmericanは父のPersonを継承して、サブクラスはconstructorを定義していません.デフォルトでは一つを追加して、constructorでsuper関数を呼び出します.super関数を呼び出したのは、サブクラスで親クラスのthisを得るためで、呼び出した後に、thisはサブクラスを指します.つまり父のタイプです.プロトタイプ.
class Chinese extends Person{
    constructor(skin,language,positon){
        //console.log(this);//  
        super(skin,language);
        //super();
        //console.log(this);  super    this,   
        this.positon=positon;
    }
    aboutMe(){
        console.log(this.skin+' '+this.language+' '+this.positon);
    }
}
2)サブクラスはconstructorのサブクラスがありますが、constructorの方法でsuper方法を呼び出さなければなりません.そうでなければ、newインスタンスの時にエラーが発生します.子類は自分のthisの対象ではなく、父類のthisの対象を継承するためです.super関数を起動しないと、サブクラスはthisオブジェクトを得られません.super()は父類の構造関数として、子類のconstructorにしか現れません.しかしsuperは親類のプロトタイプのオブジェクトを指し、親類の属性と方法を呼び出すことができます.
class Chinese extends Person{
    constructor(skin,language,positon){
        //console.log(this);//     super    this   
        super(skin,language);
        //super();//          ,         undefined
        console.log(this);
        this.positon=positon;
    }
    aboutMe(){
        console.log(this.x+' '+this.y+' '+this.positon);
    }
}
4.インスタンス化子オブジェクト
インスタンス化子オブジェクトの場合、サブオブジェクトは親の属性と方法を持つことができ、サブオブジェクトはまた、自分の属性と方法を持つことができる.例えば、chineseは父のsay方法を継承し、自分のchinese say方法も持っています.最後の2行のコードは1)サブクラスの_u u uを表します.プロト.属性は、構造関数の継承を表し、常に親を指します.2)サブタイプのプロトタイプ属性の_u uプロト.属性表示方法の継承は、常に親タイプのプロトタイプ属性を指します.
var american = new American('white','English');
var chinese =new Chinese('yellow','chinese','changsha');
chinese.say();//I am a Person
chinese.chinesesay();//I am a Person   I am a Chinese
console.log(American.__proto__===Person);//true 
console.log(American.__proto__);//    
console.log(American.prototype.__proto__===Person.prototype);//true
 
ES 6クラスの引き継ぎ使用詳細
2017年04月28日17:43:00
読解数:3881
ES 6 classの継承とjavaの継承は大同小異で、javaを学んだことがあれば分かりやすいと思います.すべてextensのキーワードで継承します.
 
  • class Animal{
  • constructor(color){
  • this.color = color;
  • };
  • }
  • class Bear extends Animal{
  • constructor(){
  • super();
  • }
  • }
  • 残りは多くないです.ここでES 6のsuperキーワードの使用について説明します.
    ES 6サブクラスは親クラスを継承し、constructor関数の最初の行でsuper()を呼び出す必要があります.後にキーワードthisを使うことができます.これはサブクラスに自分のthisオブジェクトがないため、親の種類のthisオブジェクトを継承して、このthisに該当する属性と方法を追加することができます.そうでないとエラーとなります.Partent.applyに相当します.SE 5はこれとは逆に、自分のthisオブジェクトを作ってから、親の方法属性をこのオブジェクトに追加します.
    superはサブクラスでは一般的に三つの役割があります.
  • は親の構造関数として呼び出された、という方法です.
  • は、一般的な方法では、親の例として
  • を呼び出す.
  • は、静的方法において、親タイプとして
  • を呼び出す.
    一般的な方法で呼び出します.この場合、親クラスの例を指します.
     
  • class Animal{
  • constructor(color){
  • this.color = color;
  • }
  • run(){
  • return "run";
  • }
  • }
  • class Bear extends Animal{
  • constructor(){
  • super();
  • console.log(super.run());
  • }
  • }
  • 静的方法で呼び出します.このときは親の種類を指します.
     
  • class Animal{
  • constructor(color){
  • this.color = color;
  • }
  • run(){
  • return "run";
  • }
  • static run(){
  • return "static run"
  • }
  • }
  • class Bear extends Animal{
  • constructor(){
  • super();
  • console.log(super.run());//run
  • }
  • static go(){
  • super.run();//static run
  • }
  • }