상속

Joy·2022년 10월 6일
0

JavaScript

목록 보기
11/15

상속

  • 상속이란?
    객체는 연관된 변수나 메서드등으로 이루어진 작은 프로그램이라고 할 수 있다.
    상속은 객체의 로직을 그대로 물려 받아 또 다른 객체를 만들 수 있는 기능을 의미한다.
    상속받은 객체는 부모객체의 어떤 기능은 제외하고 추가하면서 기존의 로직을 수정하고 변경해서
    새로운 객체를 만들 수 있게 한다.
    =>로직을 재활용하게 할 수 있다.
	function Person(name){ //생성자로 쓰일 함수
    	this.name = name;
    }
    Person.prototype.name = null;
    Person.prototype.introduce = function(){
    	return 'My name is ' +this.name;
    }
    
    
    function Programmer(name){ //생성자로 쓰일 함수
    	this.name = name;
    }
    Programmer.prototype = new Person();
    
    var p = new Programmer('joy');
    console.log(p.introduce());

새로운 Programmer라는 생성자를 만들었다.

1.new Programmer라는것을 통해서 새로운 빈 객체를 만들었고 프로퍼티 name의 값으로 인자joy를 지정했다.
2.p.introduce하게 되면 'My name is joy'라는 결과가 나온다.

Programmer라는 생성자 안에는 introduce라는 메서드가 정의 되어있지 않은데 introduce의 결과가 나오게 된 이유는?
introduce는 Person 객체에 prototype이라는 프로퍼티의 메서드로 정의되어있고
prototype을 통해 Programmer가 Person의 introduce를 상속받았다.

어떤 객체를 상속받고 싶다면 그 객체를 생성자의 prototype에 할당시키면 된다.

상속의 활용 - 프로토타입

프로토타입이란? 말 그대로 객체의 원형으로 유전자의 역할을 한다고 볼 수 있다.
함수는 객체이며 생성자 또한 함수이자 객체이다.
객체는 property(프로퍼티)를 지닐 수 있고 prototype(프로토타입)이라는 property(프로퍼티)는 이미 용도가 약속되어 있는 유전자 역할의 특수한 프로퍼티이다.

	function Ultra(){}
    Ultra.prototype.ultraProp = true;
    
    function Super(){}
    Super.prototype = new Ultra();
    
    function Sub(){}
    Sub.prototype = new Super();
    
    var o = new Sub();
    console.log(o.ultraProp); //true

세개의 생성자가 정의되어 있다.
o변수에 Sub생성자를 통해 객체를 만들어 담았다.
그리고 o.ultraProp을 실행했다.
Sub생성자에는 ultraProp을 가지고 있지 않다.
하지만 Sub생성자는 Super생성자를 상속받았고, Super생성자에도 ultraProp은 없지만 Ultra생성자를 상속 받았다. 이 Ultra생성자에 ultraProp이 존재하며 o.ultraProp의 결과는 true가 나온다.
이는 연속적인 상속으로 연결된 고리를 따라 실행됐기 때문이며 이것을 prototype chain(프로토타입체인)이라고 한다.

profile
🐣

0개의 댓글