TIL14: OOP/Inheritance Patterns
オブジェクト向けのプログラミングでは、Instantiation Patternsは「パッケージ」と「抽象」についてある程度理解しています.Inheritance Patternsによって「継承」と「多形性」を理解します.
Pseudoclassicalから「継承」
まずプロトタイプチェーン接続を使用します(
でもこの時Studentプロトタイプ作成中、Studio.prototype.コンストラクション関数もHumanprototype.Student.prototype.コンストラクション関数がStudioオブジェクトを参照することを指定する必要があります. Pseudoclasicの「多形性」
これに先立ち,プロトタイプとコンストラクション関数の関係を明らかにし,親オブジェクトと子オブジェクトの継承によって属性とメソッド,および「this」を伝達する.
一方、子オブジェクトのメソッド機能を拡張して、親オブジェクトのメソッドと子オブジェクトのメソッドの実行結果が異なるようにすることもできます.親オブジェクトのメソッドを呼び出すときに、
まずプロトタイプチェーン接続を使用します(
Instance.__proto__ === Class.prototype)
メソッドとHuman.prototypeを使用してStudio.prototypeを作成してObject.create()
を接続します).でもこの時Studentプロトタイプ作成中、Studio.prototype.コンストラクション関数もHumanprototype.Student.prototype.コンストラクション関数がStudioオブジェクトを参照することを指定する必要があります.
Human()
を呼び出して、Studioオブジェクトに入力された伝達係数をHumanオブジェクトに渡す場合、 call()
またはapply()
の方法を使用してStudioオブジェクトの実行コンテキスト「this」を共有する必要があります.var Human = function(name) {
this.name = name;
}
Human.prototype.sleep = function() {
console.log('zzz');
};
var Student = function(name) {
// 3. Human 객체로부터 Student객체로 상속: Execution Context('this') 공유
Human.call(this, name);
// Human.apply(this, arguments);
};
// 1. prototype chain 연결
Student.prototype = Object.create(Human.prototype);
// 2. constructor 연결
Student.prototype.constructor = Student;
Student.protytype.learn = function() {
console.log('learning');
};
var steve = new Human('steve');
steve instanceof Human; // true
steve.__proto__ === Human.prototype; // true
steve instanceof Student; // false
steve.__proto__ === Student.prototype; // false
var john = new Student('john');
john instanceof Human; // true
john instanceof Student; // true
john.__proto__ === Student.prototype; // true
john.__proto__ === Human.prototype; // false
これに先立ち,プロトタイプとコンストラクション関数の関係を明らかにし,親オブジェクトと子オブジェクトの継承によって属性とメソッド,および「this」を伝達する.
一方、子オブジェクトのメソッド機能を拡張して、親オブジェクトのメソッドと子オブジェクトのメソッドの実行結果が異なるようにすることもできます.親オブジェクトのメソッドを呼び出すときに、
call()
またはapply()
メソッドを使用して実行コンテキストを共有することもできます.その後、機能を追加することで多様化を実現できます.// 다형성 구현: 메소드 확장
Student.prototype.sleep = function() {
Human.prototype.sleep.call(this);
console.log('do not sleep');
};
var steve = new Human('steve');
steve.sleep(); // 'zzz'
steve.learn(); // TypeError
var john = new Student('john');
john.sleep(); // 'zzz' 'do not sleep'
john.learn(); // 'learning'
コードおよびリソースソース:コードステータスReference
この問題について(TIL14: OOP/Inheritance Patterns), 我々は、より多くの情報をここで見つけました https://velog.io/@charlie-lyc/TIL14-OOP-Inheritance-Patternsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol