생성자.prototype 와 생성자.constructor.prototype 의 차이점

예전에 어떤분이 좋은 질문을 올려주셔서 제가 냅다 답변한 글이 있습니다.

이걸 팁으로 올림으로써 자스 프로그래밍 하면서 답답했던 부분이 해소되기 바랍니다.

Q)

자바스립트는 모든 함수에 대해서 prototype과 constructor이라는 속성을 지원한다고 합니다.  그런데 교재에 몇 가지 혼동되는 표현이 있어서 질문드립니다.

생성자.prototype

생성자.constructor.prototype

이 둘이 뭐가 다른가요?  prototype은 클래스 외부에서 아직 개체가 되지 않은 것의 this를 나태내고.
constructor는 객체의 prototype를 만든 함수를 반환하는 것으로 알고 있습니다.  그러면 첫 번째의 것은 생성자의
this를 나타낼 것이고, 생성자.constructor.prototype은 뭐죠?  도무지 알 수가 없네요.  이거 너무
헷갈립니다.

A)

네. 다릅니다.

constructor 속성은 일종의 상속 개체를 반환한다고 보면 되는데

예를 들어 function A(){} 라고 A 클래스를 만들었을 때,

A.prototype 는 당연히 A 자신을 나타내지만

A.constructor.prototype 는 A를 창조한 부모가 함수 구문이기 때문에 Function 객체에 대한 prototype 를 반환합니다.

따라서

A.prototype 의 this 는 A가 되겠으며

A.constructor.prototype 는 A를 창조한 Function 객체가 this 로 반환되겠습니다.

이 때 햇갈리는 부분이 바로 개체 생성 후 this 에 대한 참조인데요.

A.prototype.b=function(){

    console.log(this.prototype);

    console.log(this.constructor.prototype);

};

일 경우에는 둘 다 같은 결과가 나오지만 이 때 주의해야 할 점!

this!=this.constructor

this 는 생성한 객체를 참조하기 때문에 a 가 되겠으며, this.constructor 는 생성자를 참조하기 때문에 A 가 되겠습니다.

답글 남기기

Your email address will not be published / Required fields are marked *