본문 바로가기

자바스크립트

[Javascript] - 함수의 prototype 프로퍼티

함수의 prototype 프로퍼티

 

- new F()와 같은 생성자 함수를 이용하면 새로운 객체를 만들 수 있다 그런데 F.prototype이 객체면 new 연산자는 F.prototype을 사용해 새롭게 생성된 객체의 [[Prototype]]을 설정한다.

 

- F.prototype에서 prototype은 F에 정의된 일반 프로퍼티라는 것을 주의해야 한다.

 

 

 

위 예제에서 Rabbit.prototype = animal은 new Rabbit을 호출해 만든 새로운 객체의 [[Prototype]]을 animal로 설정하란느 것을 의미한다.

 

 

- 위 그림에서 가로 화살표는 일반 프로퍼티인 prototype을 세로 화살표는 [[Prototype]]을 나타낸다 세로 화살표는 rabbit의 animal을 상속받았다는 것을 의미한다.

 

함수의 prototype 프로퍼티와 constructor 프로퍼티

 

- 개발자가 특별히 할당하지 않더라도 모든 함수는 prototype 프로퍼티를 갖는다.

 

 

- 기본 프로퍼티인 prototype은 constructor 프로퍼티 하나만 있는 객체를 가리키는데 이 constructor 프로퍼티는 함수 자신을 가리킨다.

 

 

- 특별한 조작을 가하지 않았다면 Rabbit을 구현한 객체 모두에서 [[Prototype]]을 거쳐 constructor 프로퍼티를 사용할 수 있다.

 

- 객체가 있는데 이 객체를 만들 때 어떤 생성자가 사용되었는지 알 수 없는 경우 이 방법을 유용하게 사용할 수 있다.

 

- 어느 방식을 사용해 객체를 만들든 constructor에서 가장 중요한 점은 다음과 같다  자바스크립트는 알맞은 constructor 값을 보장하지 않는다는 것이다.

 

- 함수에 기본적으로 prototype 값이 설정되긴 하지만 그게 전부이다 constructor에 벌어지는 모든 일은 전적으로 개발자에게 달려있다.

 

 

- 함수의 기본 prototype값을 다른 객체로 바꾸면 이 객체엔 constructor가 없을 것이다.

 

 

- 위의 예제처럼 이런 상황을 방지하고 알맞은 constructor을 유지하려면 prototype 전체를 덮어 쓰지 말고 기본 prototype에 원하는 프로퍼티를 추가 / 제거 해야 한다.

 

 

- constructor 프로퍼티를 수동으로 다시 만들어주는 것도 대안이 될 수 있다.