[2020.0.29 TIL]オブジェクト向けプログラミング-継承モード


継承(継承モード)


子クラスが親クラスのコードを継承することで、重複コードのパターンを除去します.サブクラスは、親に不要なコードを追加し、メソッドをいつでも呼び出すこともできます.
[1行要約]
継承モードを使用すると、既存のクラスに優雅な方法で機能を追加できます.

継承モードの使用


1. PseudoClassical


Object.create(親)
//pseudoClassical

var Human = function(name) {
	this.name = name;
}

Human.prototype.sleep = function() {
	console.log (this.name + ' is sleeping...');
}

var steve = new Human('steve');


// new Student로 인스턴스를 만들 때, this(인스턴스)가 Human으로 전달되지 않음.
// 그래서 call 메소드를 통해 this를 전달해줘야함!
var Student = function(name){
	Human.call(this, name); // Human.apply(this, arguments)
}

// 카피해서 새로 만든다.
Student.prototype = Object.create(Human.prototype);
// constructor와 instance 사이에 연결고리가 끊어지므로 다시 연결해야함
Student.prototype.constructor = Student;
Student.prototype.learn = function() {};

var john = new Student('john');
john.learn();
john.sleep(); // john is sleeping...

2.ES 6 Classキー継承の使用


extends,
// ES6 Class키워드

class Human {
	constructor(name) {
		this.name = name;
	}
	sleep() {
		console.log(this.name + ' is sleeping...');
	}
}

var steve = new Human('steve');

class Student extends Human {
	constructor(name) {
		super(name)
	}
	learn() {
	
	}
}

var john = new Student('john');
john.learn();
john.sleep(); // john is sleeping...

スーパーキー


親が持つ機能のキーワードの読み込み
superがない場合、継承時に親が属性を追加したり、メソッドを変更したいときに直接入力したりするのは面倒です.
コードを繰り返すことなく、スーパーキーワードを使用してオブジェクト向けに符号化できます.

superキーワードの2つの使い方

  • super.():継承された親クラスのプロパティを呼び出すために、コンストラクション関数でカッコとともに呼び出すことができます.
  • super.method():親メソッドに対応する戻り値を返します.親クラスで定義されたメソッドに機能を追加できます
  • class Person {
    	constructor (name, first, second) {
    		this.name = name;
    		this.first = first;
    		this.second = second;
    	}
    
    	sum() {
    		return this.first + this.second;
    	}
    }
    
    class PersonPlus extends Person {
    	constructor (name, first, second, third) {
    		super(name,first,second);
    		this.third = third;
    	}
    	sum() {
    		return super.sum() + this.third;
    	}
    	avg() {
    		return (this.first + this.second+ this.third) /3;
    	}
    }