코드스테이츠 강의자료 외 유튜버 코딩애플님의 영상을 참고하며 공부했는데 프로토타입을 '유전자'라고 생각하면 이해가 쉬워진다고 하셔서 그렇게 해보기로 했다.
프로토타입: 객체를 생성하면 생기는, 메서드를 저장하는 공간.
//ES5 문법
function Rabbit(){
this.명칭= '토끼';
this.개체수= 10;
this.우리= 'A';
}
//class에 food 추가
Rabbit.prototype.먹이 = '당근';
let 토깽이 = new Rabbit();
위에 적은 내용과 같이 Rabbit.prototype.먹이 로 class에 먹이를 추가하고 콘솔에 찍어보면 아래와 같은 결과를 볼 수 있다.
Rabbit.prototype.먹이는 부모인 class Rabbit에게만 요소를 추가시켰기 때문에 instance인 토깽이는 여전히 '먹이'라는 요소를 가지고 있지 않지만, 상속관계로 인해 토깽이는 Rabbit의 prototype, 즉 Rabbit의 '유전자'에 각인된 '먹이'를 끌어다 쓸 수 있다.
우리가 배열을 사용할 때 쓰는 .push(), .slice() 등도 Class인 Array가 가지고 있는 prototype이다. 우리는 Array의 instance를 만들어(ex. let arr=[]) 사용하며 '토깽이.먹이'처럼 부모인 Array의 메서드를 가져다 쓰고 있는 것이다.
instance에서 부모의 prototype, 즉 부모의 '유전자'에 접근 및 변경하는 상속자가 .__proto__로 알고있는데, mdn web docs에 따르면 .__proto__의 사용을 권장하지 않는다고 한다.
이 글은 코드스테이츠 블로깅 과제로, 배운 것을 정리한 글입니다.
참고자료
'SW공부 > JavaScript' 카테고리의 다른 글
[JavaScript] new Set()으로 배열에 중복이 있는지 확인하기 (0) | 2023.03.28 |
---|---|
[JavaScript] 프로토타입 체인, extends와 super (0) | 2023.03.16 |
[JavaScript] 객체지향의 개념 (0) | 2023.03.15 |
[JavaScript] Class(클래스)와 Instance(인스턴스) (0) | 2023.03.15 |
[JavaScript] 랜덤 숫자 생성하기 (Math.random()) (0) | 2023.03.07 |