프로토타입 체인

이유정·2022년 9월 22일
0

코드스테이츠 TIL

목록 보기
22/62
post-thumbnail

프로토타입 체인

prototype 프로퍼티를 통해 생성자 함수는 인스턴스에게 프로토타입 객체에 있는 데이터 , 메소드를 상속한다.
-> 인스턴스 객체의 key에 접근할 때, 해당 객체에게 key가 없다면 그 다음으로 상위 프로토타입 속성에서 key가 있는지 확인한다.
->없다면 그것을 찾기 위해 더 상위의 프로토타입에서 찾는다. 이것을 프로토타입 체인이라고 한다.

.prototype

내가 원형일 때 존재한다.
함수 객체만 가지고 있다.

따라서,
arr = [1,2,3] 일때
Array.prototype 은 [constructor: ƒ, at: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, …] 이렇게 나오고 왜냐하면 Array는 원형이니까
arr.prototype은 undefined 이렇게 나온다.

.proto

모든 객체가 가지고 있다.
하나의 link로 표현

위의, arr.prototype은 undefined 였고,
arr.proto는 [constructor: ƒ, at: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, …] 값이 나온다.
그러니까proto로 prototype 객체의 값에 접근할 수 있음을 알 수 있다.

Object

Array의 원형은 뭘까? Object다.
우선 Array는 함수다. 함수는 객체다.
함수 객체만 prototype 프로퍼티를 가질 수 있고 인스턴스를 생성할 수 있다.

정리하자면,,
arr의(이거는 내가 arr=[1,2,3]으로 정의함)언니인 Array는 사실 함수다,,
함수는 사실 객체고, 그렇기 때문에 arr 너도 객체야 ㅎ

상속 관점에서 자바스크립트의 유일한 생성자는 객체 뿐이다. 각각의 객체는 자신의 프로토타입이 되는 다른 객체를 가리킨다. 그 객체의 프로토타입 또한 프로토타입을 가지고 있고 반복되다, 결국 null을 프로토타입으로 가지는 오브젝트에서 끝난다. null은 더 이상의 프로토타입이 없다고 정의되며, 프로토타입 체인의 종점 역할을 한다.

원시 자료형으로 취급 받는 null의 자료형이 사실 원시 자료형이 아닌건 빈 객체 주소를 참조하고 있기 때문이다. 그리고 객체는 참조자료형이기 때문에
Array.prototype.constructor === Array // true;
Array.prototype === [1,3,4].proto //true;
Array.prototype.name === [1,3,4].name // true;

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글