프로토타입과 프로토타입 상속 파트 정리
-
프로토타입 상속
-
프로토타입
-
다른 객체를 참조하는 경우의 참조 대상
-
프로토타입 상속이란 객체가 어떤 객체를 프로토타입으로 설정해서 프로퍼티, 메서드를 상속받는 경우
-
대상 객체에서 프로퍼티 읽거나 메서드 호출 시 해당하는 것이 없을 경우 프로토타입으로 거슬러 올라가서 찾음
-
상속 받은 메서드의 this는 프로토타입이 설정되는 것이 아닌 호출한 객체
-
-
[[Prototype]]
-
모든 객체에 존재
-
null 이나 다른 객체에 대한 참조값이 됨
-
참조하는 객체를 프로토타입
-
proto : [[Prototype]] setter 나 getter 로 최근데 잘 안 쓰임
-
-
for..in
- 객체 자체에서 정의한 프로퍼티와 프로토타입까지 전부 순회함
-
for..in 외 메서드
-
여러 메서드 존재
-
대부분 객체 자체에서 정의된 프로퍼티만 순회
-
-
-
함수의 prototype 프로퍼티
-
객체 생성자 함수
-
호출 시 새로운 객체의 [[prototype]] 설정하는 기능
-
일반 객체에서는 이뤄지지 않음
-
prototype 프로퍼티
-
일반 프로퍼티
-
생성자 호출 시 만들어짐
-
값은 객체나 null만 가능하며 다른 값은 무시됨
-
constructor 프로퍼티
-
모든 함수가 가지며 기본 값으로 가짐
-
기본형에선 함수 자기 자신 가리킴
-
호출 시 객체의 프로퍼티에도 있으며 생성자 함수 가리킴
-
JS 에서는 보장해주지 않아서 prototype 설정 시 consturctor 따로 유지 작업 해줘야 함
-
-
-
-
-
네이티브 프로토타입
-
모든 내장 객체의 메서드는 해당 내장 생성자 함수의 프로토타입에 저장됨
-
객체 자체엔 데이터만 저장됨
-
리터럴 문법 또한 생성자 함수와 동일
-
명세서에서 모든 내장 프로토타입의 상위엔 Object.prototype. 즉 모든 것은 객체를 상속받음
-
내장 프로토타입
-
프로토타입 체인 상 중복 메서드 있을 시 체인 상에서 가장 가까운 메서드 사용(프로토타입 알고리즘에 의해 찾고 올라가는 동작에 의함)
-
수정 가능
-
메서드 빌리기
-
프로토타입의 메서드를 빌리는 경우
-
내장 메서드 대부분이 해당 메서드가 속한 자료형인지 확인하지 않고 프로퍼티만 확인해서 진행하는 알고리즘 이용
-
지양하며 폴리필 만들 시만.
-
-
-
원시값
-
래퍼 객체의 프로토타입에 메서드 저장
-
메서드 호출 시 래퍼 객체로 감싸진 다음 메서드 호출하고 래퍼 객체 바로 삭제
-
undefined, null은 래퍼 객체 없음
-
래퍼 객체는 보이지 않는 곳에서 생성되며 최적화는 JS 엔진이 담당
-
-
-
프로토타입 메서드와 proto가 없는 객체
-
proto
-
Object.prototype 의 접근자 프로퍼티
-
[[prototype]] 그 자체가 아닌 가져오기 위한 getter/setter
-
사용자가 키 직접 만들 게 허용 시 proto 에 접근 할 여지 생기며 보안 문제 발생할 수 있음
-
-
모던 메서드
-
proto 대신 프로토타입에 접근 할 수 있으며 proto 직접 접근접근 하는 것 방지함
-
proto없게 하여 상속을 받지 않는 객체 생성 가능
-
객체 프로퍼티 반환하는 메서드들은 객체가 ‘직접’ 소유한 프로퍼티만 반환
-
지향
-
-