티스토리 뷰

TIL/일기, 공부 내용 정리

프로토타입

Jin_frontend 2024. 12. 26. 10:23

프로토타입

  • 객체 지향 언어: 클래스 기반 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 등의 메서드는 비정적 메서드)
  • 다중 프로토타입 체이닝
    • 계층적 상속 구조를 구현할때 사용하고, 여러 단계의 메서드와 프로퍼티에 접근이 가능하다.
  • 기본 체인이 아닌 더 긴 체인을 만들고 싶은 경우 __proto__를 연결하는 방법
    • 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함