Javascript 에서는 객체를 상속하기 위해 프로토타입이라는 방식을 사용한다.
이미 존재하는 생성자에게 메소드를 추가하기 위해 프로토타입 속성을 사용하는 법을 알아보자
자바스크립트는 프로토타입기반 언어라고도 불리운다
모든 객체들이 그들의 프로토타입으로 부터 메소드와 속성들을 상속받는다.
모든 객체들은 최소한 하나 이상의 다른 객체로부터 상속을 받는데, 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 한다.
동작 순서 : 프로토타입 체인
person 객체가 자체적으로 valueOf() 메소드를 가지고 있는지 체크
person의 프로토타입 객체 Person()의 생성자의 프로토타입에 valueOf() 메소드가 있는지 체크
여전히 없으므로 Person()의 생성자의 프로토타입 객체의 프로토타입 Object() 생성자의 프로토타입이 valueOf()가 있는지 체크
Person 자체의 prototype은 따로 지정한게없어서 내용이 없음
하지만 Person의 부모 Object의 Prototype은 내용이 많다
이를 상속 받는다
생성자의 프로토타입에 메소드를 추가하면 생성한 인스턴스들에서 모두 사용할 수 있다
일반적으로 속성은 생성자에서, 메소드는 프로토타입에서 정의한다
프로토타입 = { 프로토타입 오브젝트 + 프로토타입 링크}
1. 프로토타입 오브젝트
객체는 항상 함수로 만들어진다
var person = new Person()
함수가 정의될 때는 2가지 일이 동시에 일어난다
1) 해당 함수에 Constructor(생성자) 자격부여
2) 해당 함수의 "Prototype Object" 생성 및 연결 => prototype 속성이 생긴다
2. 프로토타입 링크
__proto__ : 객체가 생성될때 조상이었던 함수의 Prototype Object를 가리킨다.
프로토타입 체인 : 연결 연결 조상까지 올라가서 필요한 값을 찾는것
'programming > Javascript' 카테고리의 다른 글
[JS] 비동기 프로그래밍 Callback -> Promise -> Async-await (0) | 2022.06.27 |
---|---|
얕은복사 & 깊은복사 (0) | 2022.03.11 |
자바스크립트의 형 변환(+ null & undefined 차이) (0) | 2022.03.11 |
이벤트 버블링과 캡처링 (0) | 2022.03.11 |
[Javascript] 실행 컨텍스트 (0) | 2022.03.06 |