OOP는 개발 패러다임 중 하나로, 현실 세계의 개념과 객체를 모델링하여 프로그램을 구축하는 방법이다. 각 객체는 객체 고유의 특징이나 성질을 나타내는 "속성=프로퍼티"과 객체의 기능을 나타내는 "메소드"로 구성이 되어있다. 이러한 객체지향프로그래밍의 보다 자세한 특징으로는 아래와 같은 것들이 있다.
자바스크립트에서 프로토타입이란 객체 지향 프로그래밍의 중요한 개념 중 하나이며 이를 기반으로 상속을 구현하여 코드의 불필요한 중복을 제거한다.
추가로 설명하면, 프로토타입은 객체의 부모 역할을 하는 객체로, 다른 객체로부터 상속된 속성과 메서드를 포함하고 있다. 자바스크립트에서 모든 객체는 프로토타입을 가지고 있으며, 각 객체는 자신의 프로토타입을 가리키는 proto라는 내부 속성을 가진다.
proto와 prototype은 자바스크립트에서 서로 다른 두 가지 프로퍼티로, 서로 다른 목적과 사용 사례를 가지고 있다. proto는 해당 객체의 프로토타입(부모 객체)에 대한 참조를 가리키며, 프로토타입 체인을 통해 상위 프로토타입의 속성과 메서드를 찾을 때 사용된다. 반면 prototype은 함수 객체(function)에서만 사용할 수 있고, 함수로부터 생성된 객체들이 공유하는 프로토타입 객체를 가리킨다. prototype 프로퍼티는 주로 생성자 함수와 함께 사용되고 생성자 함수를 사용하여 객체를 생성하면(인스턴스) 해당 인스턴스는 생성자 함수의 prototype에 정의된 메서드와 속성을 상속한다.
자바스크립트에서 모든 객체는 상속을 구현하기 위해 "프로토타입"이 필요하다. 이는 객체를 생성하는 역할을 하는 생성자 함수와 이 객체들이 공유하는 프로토타입이 함께 사용되어야 객체를 효율적으로 정의하고 관리할 수 있기 떄문이다. 이것이 가능한 이유는 모든 객체의 프로토타입에는 constructor 라고 하는 프로퍼티가 있어서 각 객체의 생성자 함수에 접근할 수 있기 때문이다. 서로 맞물리는 원형링크드리스트 구조인 것이다.