JavaScript---プロトタイプチェーン(ES 6クラス継承)
5469 ワード
クラスの本質と相続連鎖
どの対象にも__がありますプロト.属性は、その構造関数のプロトタイプ属性を指します.classはインスタンスオブジェクトを構成するので、その本質は依然として関数であり、関数は同時にprototype属性とproto属性を持つ.
classのプロトタイプチェーンの例:
キーワード「extens」による継承
classはキーワード「extens」を使うことができます.当時このキーワードで継承されたサブ構造関数と親構造関数にはプロトタイプチェーン上のリンクがあります.このメカニズムはES 6以降のクラスの継承に特有です.
例:
オブジェクトのプロトタイプオブジェクト(プロト属性)を設定するために、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が正式に推奨するプロトタイプオブジェクトの設定方法です.