티스토리 뷰
반응형
참고
- JS에서는 객체 상속을 위해 프로토타입 방식을 사용한다.
- JS는 흔히 Prototype-based language라고 하며, 이는 곧 모든 객체들이 메소드와 속성들을 상속받기 위한 템플릿 역할을 맡는 'prototype object'를 갖는다는 의미가 된다.
- Prototype은 자신 또한 프로토타입을 두어 해당 프로토타입의 메소드와 속성을 상속받을 수도 있으며, 이러한 연결 관계를 prototype chain이라고 한다.
- 상속되는 속성과 메소드는 각 객체가 아닌 객체 생성자의 'prototype' 속성에 정의된다.
- JS는 객체 인스턴스와 프로토타입 간에 연결이 구성되어 있으며, 이 연결을 따라 프로토타입 체인을 타고 올라가며 속성과 메소드를 탐색한다.
function Injuk(name, age) {
this.name = name;
this.age = age;
this.barf = function() {
console.log('bow wow');
}
}
let injuk = new Injuk("injuk", 3)
injuk.barf();
console.log(injuk.__proto__);
console.log(injuk.__proto__.__proto__);
injuk.toString();
/* 실행 결과
bow wow
Injuk {}
{}
*/
- injuk 변수는 Injuk를 prototype으로 갖고, Injuk는 다시 Object를 prototype으로 갖는다.
- injuk.toString은 prototype chaining에 따라 injuk에서 우선 toString 메소드를 탐색하고, 없을 경우 Injuk에서, 다시 없을 경우 Object에서 탐색한다.
- 이렇듯 프로토타입 체인은 실제로는 한 객체의 메소드와 속성이 모두 다른 객체로 복사되거나 상속되는 것이 아니다. 체인을 타고 올라가며 접근할 뿐임을 주목!
- 이렇게 상속(?) 받는 속성과 메소드는 모두 prototype '속성'에 정의된다.
- prototype의 확인은 console 탭에서 [객체].prototype으로 확인할 수 있다.
- Object, Array, Number, String, Date, Boolean 등으로부터 prototype을 확인해보자.
- Object를 제외한 모든 유형은 object를 prototype으로 갖는다.
- 이러한 prototype chaining 구조 덕분에 우리는 별다른 추가 프로그래밍 없이 length, toString, split 등의 메소드를 객체 생성 직후에 사용할 수 있게 된다!
'Dev. > javascript' 카테고리의 다른 글
[JS] 배열과 some (0) | 2021.04.01 |
---|---|
[JS] 배열과 reduce (0) | 2021.03.31 |
[JS] Array-like(유사 배열) / Array(배열) (0) | 2021.03.29 |
[JS] eval is evil (0) | 2021.03.29 |
[JS] async와 await (0) | 2021.03.23 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- react
- postgresql
- jQuery
- AWS IoT
- AWS
- Docker
- 코딩테스트
- Node.js
- Database
- Java
- Spring Cloud Config
- javascript
- Gradle
- Vault
- Linux
- mysql
- shell
- spring boot
- etc
- JEST
- dev
- JPA
- IntelliJ
- pgloader
- eureka
- terraform
- kotlin
- Puppeteer
- Git
- hashicorp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함