프로토 타입이란 클래스나 객체의 내용 복사 없이도 상속의 효과를 구현할 수 있게 해주는 방법이다.
Object.is(), Object.keys() 같은 메서드들은 프로토타입 객체 안에 정의되지 않았기 때문에 Object.prototype에서 상속되는 객체 인스턴스나 객체 유형(object type)에 의해 상속 되지 않는다.hasOwnProperty() 메서드를 통해 객체의 고유한 속성과 prototype 속성을 구분할 수 있다.프로토타입 링크를 proto 라고 편의상 적어놓긴 했지만 정식 명칭은 [[prototype]] 이고, proto 은 크롬을 포함한 최신 자바스크립트 환경에서 사용하는 이름이다.
그런데 프로토타입 링크를 언제 사용되는 걸까?
현재 객체에 존재하지 않는 속성에 접근하려고 할 때 프로토타입 링크를 통해 프로토타입 링크가 참조하고 있는 부모 객체를 찾으려고 할 때 사용된다.
예를 들어 아래와 같이 배열을 하나 정의했다고 하자.
const arr = [1, 2, 3];
arr의 prototype 을 확인해 보면 undefined 이고 위 코드에서 확인할 수 있다시피 따로 프로토타입에 만들어 놓은 메서드는 없다. 하지만 map이나 filter 등 내가 정의하지 않는 메서드를 사용할 수 있는데, 이 이유가 프로토타입 링크에 의한 탐색 때문인 것이다.
