• 자바스크립트는 클래스 기반이 아닌 프로토타입 기반 객체지향 프로그래밍 언어이다

프로토타입 객체

  • 자바스크립트에서는 모든 객체가 상위 객체에 연결되어 있다. 이러한 상위 객체들을 프로토타입 객체/프로토타입이라 한다.
  • 예: 모든 객체는 Object라는 상위 객체와 연결되어 있고 [[Prototype]] 인터널 슬롯(__proto__)을 통해 상위 객체에 정의된 속성을 사용할 수 있다

__proto__와 prototype 프로퍼티

  • __proto__는 어떤 객체의 부모 역할을 하는 프로토타입 객체를 가리킨다. (e.g. 일반적으로 함수는 __proto__ = Function.prototype 값을 갖고 그 외 다른 객체는 __proto__ = Object.prototpe을 갖는다). 이 속성을 변경하는 방식으로 상속을 구현할 수 있다.
  • prototype은 함수 객체가 생성자로 사용될때 함수의 형태를 정의하게될 부모 객체를 가리키는 속성이다. 이 속성에 프로퍼티나 메소드를 추가 하면 prototype chain에 따라 자식에서 추가된 요소에 접근 가능하다.

constructor 속성

  • 객체의 입장에서 자신이 생성한 객체를 가리킨다 = 어떤 생성자 함수가 해당 객체를 생성했는지를 알수 있는 속성

prototype chain

  • 어떤 객체의 프로퍼티나 메소드에 접근할때 해당 요소가 현재 객체에 없다면 프로토타입 체인을 따라서 부모 객체에서 해당 프로퍼티나 메소드가 있는지 찾는다
  • 이때 접근하려고 하는데 없는 경우에만 프로토타입 체인이 동작하고 객체의 프로퍼티에 값을 할당하는 경우 그냥 값이 동적으로 추가된거나 값이 재할당만 된다

Wrapper class

  • 원시 타입은 일반적으로 객체가 아니므로 프로토타입을 가지지 않고 따라서 프로퍼티나 메소드를 추가할 수 없다
  • 원시 타입 = number, string, boolean, null, undefined
  • 자바스크립트에서는 number, string, boolean에 대해 wrapper 객체라는 것을 가지고 있다. 이 wrapper 객체를 사용해 원시타입에서도 프로퍼티가 공유된다
  • 해당 원시 타입과 관련된 기능을 객체지향적으로 제공할때 사용된다.

😊