ES 6のclass関数

1524 ワード

構文は次のとおりです.
class Father{
	constructor(){
		this.a = '12';
	}
	toString(){
		cosole.log('hah');
	}
}
console.log(typeof Father);//"function"
console.log(Father===Father.prototype.constructor);//true
  • は、構造関数
  • に相当する.
  • クラス内のすべてのメソッドはprototypeに掛けられ、Object.hasOwnPropertyNames(Point.prototype)は指定されたオブジェクトのすべての自己属性の属性名(列挙できない属性を含むが、Symbolという属性を含まない)からなる配列を返す.
  • constructorはデフォルトでインスタンスオブジェクトを返し、明示的な書き込みがない場合、エンジンはconstructor関数
  • を追加するデフォルトである.
  • は、getの値関数およびsetの値関数(いずれもDescriptorオブジェクトに掛けられている)
  • を用いることができる.
    class Father{
    	constructor(){
    		this.a = '12';
    	}
    	get prop(){
    		return 'hah';
    	}
    	set prop(value){
    		console.log("Fail", value);
    	}
    	toString(){
    		cosole.log('hah');
    	}
    }
    let oL = new Father();
    oL.prop = 123; //Fail 123
    console.log(oL.prop); //hah
    
  • 内部では厳格モードが使用され、変数リフト
  • は存在しない.
  • thisは問題を指し、クラス内部メソッドのthisはインスタンスを指し、thisを単独で使用するとthisが運転環境を指すが、厳格なモードを使用しているため、undefinedであり、メソッドエラーが見つからない.
  • 解決方法1.コンストラクション関数にthisをバインドする.矢印関数
  • を使用
  • 静的メソッドと静的プロパティ(プロパティ名の前に#を付ける):インスタンスに継承されず、クラスによって直接呼び出すことができ、静的メソッドのthisはクラスを指し、extendsによって
  • を継承することができる.new.target
    コンストラクション関数がどのように呼び出されるかを決定できます.class内部呼び出し、現在のclassを返し、サブクラスが親クラスを継承する場合、new.targetはサブクラスを返します