19 classの基本文法

3662 ワード

Classはes 6の文法糖で、es 5も他の方法で実現できます

きそ

let ss = "sayHi"
class Fn {
  construct(x) {
    this.x = x
  }
  toString() {
  }
  [ss]() {
  }
}
Obeject.keys(Fn.prototype)
Obeject.getOwnPropertyNames(Fn.prototype)
typeof Fn // function
Fn == Fn.prototype.construct  // true
  • Class内部の方法function
  • は使用しない.
  • メソッド間では;は使用されません.そうしないと、
  • とエラーが発生します.
  • メソッド名は、変数
  • を使用することができる.
  • classの内部に書く方法は、枚挙にいとまがないので、Object.keysを用いる
  • を取得することはできない.
  • クラスのデータ型はFunctionであり、クラス自体は構造関数
  • を指す.
  • 類の中の方法は、実は原型に書かれた
  • に相当する.
  • この形式では、変数リフト
  • は存在しない.

    construct

  • は、new
  • を使用する必要があります.
  • は、デフォルトではthisインスタンスオブジェクトを返し、return Object.create(null)
  • をカスタマイズすることができる.

    クラスのインスタンスオブジェクト

  • new
  • を用いる.
  • は、thisに直接属性を定義する場合にのみ、この属性はインスタンスオブジェクト
  • に属する.
  • すべてのクラスインスタンスが1つのプロトタイプオブジェクト
  • を共有する
  • 円形オブジェクトを取得する方法
  • .
  • Fn.prototype
  • インスタンスオブジェクトfn.__proto__(環境に依存)
  • インスタンスオブジェクトObject.getPrototypeOf(fn)
  • //  
    var fn = new Fn(1)
    fn.hasOwnproperty('x')   // true
    //  
    var ff = new Fn(2)
    fn.__proto__  = ff.__proto__   // true
    

    小さな知識点
  • Object.getPrototypeOf(obj)
  • パラメータが文字列である場合、es6でエラーは報告されず、String.protptype
  • に戻る.

    Class式

    const MyClass = class Me {
      sayHello() {
         console.log('Hello')
      }
    }
    MyClass.sayHello()
    MyClass.name // MyClass
    
  • Meクラスの内部でのみ使用できる
  • 関数式を使用して、直接使用するクラス
  • を構築できます.
  • クラスにはname属性
  • がある.

    プライベートメソッド


    クラスには独自のプライベートメソッドが必要で、外部ではオブジェクトで使用できない場合があります.以下の解決策がある
  • 一般的な方法_say、下り線.これは規範的な約束にすぎず、外部は依然としてfn._say
  • を取得することができる.
  • 内部アクセスグローバルメソッド
  • Symbol値を使用する一意性
  • let foo = Symbol('foo')
    class Fn {
      say() {
        //  
        this[foo]('1')
      }
      //  
      [foo](param) {}
    }
    

    プライベート属性


    提案,#はプライベート属性とプライベートメソッドを表す.

    これは


    オブジェクトのメソッドを解釈すると、エラーが発生しやすい.
  • は、constructorにおいてthisを手動で方法上の
  • にバインドする.
  • 矢印関数
  • を使用
  • proxy
  • を使用
    思い出
  • 矢印関数thisは外層thisを参照し、
  • は変更しません.
  • proxy基本構文var pp = new Proxy(target,handler)
  • Classの値取り関数と保存関数


    プロパティで設定可能
    class Fn {
      get prop() {
      }
      set prop(val) {
      }
    }
    var descriptor = Object.getOwnPropertyDescriptor(Fn.prototype,"prop")
    "get" in descriptor // true
    
  • 値取り関数とメモリ関数は、属性のDescriptorオブジェクト上の
  • に設定.

    ClassのGeneratorメソッド

  • classのメソッドの前に、*を追加するとgeneratorメソッド
  • になります.

    Classの静的メソッドと静的プロパティ


    スタティツクメソッド
  • 構文、メソッド名にstaticを追加すると静的メソッド
  • になります.
  • 静的方法は、インスタンスによって
  • を継承することはできない.
  • 静的方法布団類継承
  • 静的方法におけるthisは、現在のクラス
  • を指す.
    静的プロパティ
  • は、Fn.propによってのみ静的属性
  • を追加することができる.

    new.targetプロパティ


    このプロパティは、一般的にコンストラクション関数で使用されます.
  • には2つの機能があります
  • 現在のクラスはnew
  • を使用する必要があります.
  • は、直接使用できないクラス(少しインタフェースに似ている)
  • のみを継承することを定義する.
  • 子クラスが親クラスを継承し、子クラスインスタンスを作成するとき、new targetは子クラス
  • を指す.
  • 類はnewを使用しない、new.targetundefined
  • である.
    class Parent {
      constructor(name) {
        if (new.target == Parent) {
          this.name = name;
        }else {
          throw New Error(' new ')
        }
      }
    }