JavaScript---プロトタイプチェーン(ES 6クラス継承)


クラスの本質と相続連鎖
どの対象にも__がありますプロト.属性は、その構造関数のプロトタイプ属性を指します.classはインスタンスオブジェクトを構成するので、その本質は依然として関数であり、関数は同時にprototype属性とproto属性を持つ.
classのプロトタイプチェーンの例:
	class A {}
	var a = new A();
	
	/* ES6 class(   ) prototype       ,         :constructor   __proto__, ES5     */
	A.prototype
	/*  :	{constructor: ƒ}
			↲constructor: class A			>>.constructor     
			↲__proto__: Object(  )		>>.	__proto__   Object.prototype,      Object      	*/
	
	/* class(     ) __proto__          prototype   */
	A.__proto__ === Function.prototype //true

	
	a.__proto__ === A.prototype //true
	A.prototype.__proto__ === Object.prototype //true
以上のコードからわかるように、classは普通の構造関数のシンタックス糖であり、プロトタイプチェーンは普通の関数のプロトタイプチェーンと何ら違いがない.
キーワード「extens」による継承
classはキーワード「extens」を使うことができます.当時このキーワードで継承されたサブ構造関数と親構造関数にはプロトタイプチェーン上のリンクがあります.このメカニズムはES 6以降のクラスの継承に特有です.
例:
	class ASub extends A {}
					
	var asub = new ASub();
	asub.__proto__ === ASub.prototype // true       
	
	/*   ,   "__proto__"       A */
	ASub.__proto__ === A

	/*        ,          "__proto__"       Object.prototype   ,          prototype    */
	ASub.prototype.__proto__ === A.prototype // true
クラスの継承は以下のパターンで実現されます.
	class B {}
	class BSub {}

	// BSub       B    
	Object.setPrototypeOf(BSub.prototype, B.prototype);

	// BSub    B      
	Object.setPrototypeOf(BSub, B);
	const bsub = new BSub();
	
	BSub.__proto__ === B // true
	BSub.prototype.__proto__ === B.prototype //true
Object.set ProttypeOf(Obj,prototype)
オブジェクトのプロトタイプオブジェクト(プロト属性)を設定するために、ES 6が正式に推奨するプロトタイプオブジェクトの設定方法です.