티스토리 뷰
프로토타입
- 객체 지향 언어: 클래스 기반 vs. 프로토타입 기반
- 프로토타입의 개념(prototype, __proto__ , constructor등)
- 어떤 생성자 함수(Constructor)를 new 연산자와 함께 호출하면
- Constructor에서 정의된 내용을 바탕으로 새로운 인스턴스가 생성된다.
- 이때 instance에는 __proto__라는 프로퍼티가 자동으로 부여되는데,
- 이 프로퍼티는 Constructor의 prototype이라는 프로퍼티를 그대로 참조한다.
- 가급적 __proto__를 사용하지 않기를 권장, 대신 Object.getPrototypeOf()/ Object.create()등을 이용.
- __proto__는 생략가능하기 때문에, 생성자 함수의 prototype에 어떤 메서드나 프로퍼티가 있다면 인스턴스에서도 마치 자신의 것처럼 해당 메서드나 프로퍼티에 접근할 수 있다.
- prototype 프로퍼티 내부의 메서드만 접근할 수 있다.
- prototype을 확인하기 위해 constructor를 확인해볼 수 있지만, 변경 가능하므로 항상 안전한 것은 아니다.
프로토타입 체인
- 프로토타입 체인의 정의, 작동 방식
- __proto__로 계속 연결되어 있는 것
- __proto__를 계속 타고 확인하다 보면 프로토타입에 도달할 수 있다.
- 메서드 오버라이드의 정의와 특징
- 하위 객체에서 상위 객체의 메서드를 동일한 이름으로 재정의 하는 것
- 일반적으로 메서드가 오버라이드된 경우에는 자신으로부터 가장 가까운 메서드에만 접근할 수 있지만, 그다음으로 가까운 __proto__의 메서드도 우회적인 방법을 통해서이긴 하지만 접근이 불가능한 것은 아님
- 객체 메서드의 예외사항
- Object.prototype 이 항상 최상단에 있으므로 객체 전용 메서드들은 Object.prototype 이 아닌 Object 에 스태틱 메서드로 부여
- 정적 메서드는 생성자 함수에서 사용할 수 있는 메서드이고, 비정적 메서드는 인스턴스에서 사용할 수 있는 메서드. (Array.from은 정적 메서드, map, forEach 등의 메서드는 비정적 메서드)
- Object.prototype 이 항상 최상단에 있으므로 객체 전용 메서드들은 Object.prototype 이 아닌 Object 에 스태틱 메서드로 부여
- 다중 프로토타입 체이닝
- 계층적 상속 구조를 구현할때 사용하고, 여러 단계의 메서드와 프로퍼티에 접근이 가능하다.
- 기본 체인이 아닌 더 긴 체인을 만들고 싶은 경우 __proto__를 연결하는 방법
- prototype 속성을 직접 수정함으로써 체인의 단계를 추가할 수 있다.
- prototype 속성을 직접 수정함으로써 체인의 단계를 추가할 수 있다.
'TIL > 일기, 공부 내용 정리' 카테고리의 다른 글
자바스크립트의 동등 비교, 함수 (1) | 2025.01.03 |
---|---|
클래스 (0) | 2024.12.27 |
콜백함수와 클로저 (1) | 2024.12.24 |
This와 명시적 This 바인딩 (2) | 2024.12.19 |
undefined와 null, 실행 컨텍스트 정리 (0) | 2024.12.17 |