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