자바스크립트는 프로토타입 기반(Prototype-based)의 객체지향 언어입니다. C++나 Java처럼 클래스(Class)라는 설계도를 통해 객체를 생성하는 대신, 기존에 존재하는 어떤 객체(Prototype)를 원형(유전자)으로 삼고 이를 복제(참조)하여 새로운 객체를 생성합니다.
특정 객체의 프로퍼티나 메서드에 접근할 때, 해당 객체에 그 속성이 없다면 부모 역할을 하는 프로토타입 객체(__proto__)를 따라 거슬러 올라가며 탐색합니다. 이를 프로토타입 체인이라고 합니다.
위 그림에서 배열 인스턴스인 myArray 자체에는 push() 메서드가 없지만, 내부 슬롯인 __proto__를 타고 부모격인 Array.prototype으로 올라가 해당 메서드를 찾아 실행하게 됩니다. 최상위 부모는 항상 Object.prototype입니다.