본문 바로가기
Development (국비 복습 )/JavaScript

생성자(constructor)와 prototype , __proto__

by Puddingforever 2023. 2. 19.

constructor 
하나의 객체만 만들지말고, 같은 타입을 가지고 있는 객체를 
여러개 만들고 싶을때, 그 객체의 정보를 담고 있는 가이드라인 서류가 필요하다
이 가이드라인 서류를 constructor라고 한다. 

constructor의 특징으로는 , 타입은 변하지 않고, 단지 새로운 객체를 만들고 싶을 때 쓴다.

constructor로 새로운 객체를 만들때는 new키워드를 이용해서 객체를 불러와야 한다.

자바랑 다르게 class안에 생성자가 없어도 된다. 

 

근데 생성자에 또 다른 프로퍼티를 추가하는건 할 수 없다

 

Person.gender = "female"; => undefined로 된다.

 

이때는 prototype을 쓰면 된다. prototype은 한마디로 객체의 유전자같은 것인데 모든 객체는 다 그 안의 프로토타입으로 부터 프로퍼티나 메소드를 상속받는다.

 

만약 저기서 생성자 프로퍼티를 하나 더 추가하고 싶다면 , 

Person.prototype.gender = "female" 이런식으로 값을 주면된다.

 

__proto__는 조금 다른 개념인데, 이것은 부모 객체로부터 받은 유전자를 보여준다,

 

const human = {
    kind : "human"
};

const pudding  = Object.create(human);
console.log(pudding.__proto__);

human 객체를 상속받은 pudding객체를 만들었다.

이때 상속받은 정보를 확인하고 싶으면 pudding.__proto__ 를 만들어준다.

pudding은 human의 프로퍼티였던 { kind: 'human' }의 객체가 들어있다.

 


prototype 은 pudding이라는 자식 클라스가 부모 클라스에게 유전자를 주는 것이라면 , 

__proto__는 부모 클라스로부터 유전자를 받은 것을 말한다.

 

또한 prototype belongs to functions or classes 지만 __proto__는 그 객체 안에 있다 ! 유전받은거니까..그래서 모든 객체는 __proto__를 가지고 있다. 

 

prototype은 객체에 유전자를 주고 싶을 때 쓰는 것 

__proto__는 상속 받은 유전자 (모든 객체에 다 있음 ) 

 

 

 

 

https://youtu.be/1UTqFAjYx1k

 

추가로

 

const me = {};

 

const me = new Object(); 

 

둘이 같은거임 .. 

 

'Development (국비 복습 ) > JavaScript' 카테고리의 다른 글

배열 요소 삭제방법  (0) 2023.02.21
Factory Functions  (3) 2023.02.19
Javascript reference  (0) 2023.02.19
이전사진 다음사진 변경  (0) 2023.02.19
버튼 클릭시 배열 사진 변경  (0) 2023.02.18

댓글