• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Function오브젝트 관련 질문입니다!

20.06.04 00:02 작성 조회수 198

0

인스턴스가 new 키워드 + 생성자 '함수'의 조합으로 생성된다는 것은 알고 있었지만, '함수'역시 또다른 생성자 '함수'의 인스턴스라는 것은 전혀 몰랐습니다.

그래서 그런지 개념이 잘 정립이 안 되는 것 같아서 여쭤봅니다.

1.function키워드 === 생성자 함수 ???

function 오브젝트가 인스턴스라면 function키워드는 일종의 생성자 함수라는 것이 되는데요.

일반 생성자 함수와는 달리 new 키워드를 사용하지 않는 것도 그렇고, function키워드와 일반적인 생성자 함수의 정확한 차이가 무엇인지 궁금합니다.

2.인스턴스의 구조

첨부해드린 그림과 같이, 일반적인 생성자 함수는 prototype프로퍼티와 __proto__프로퍼티를 함께 가집니다.

여기서 __proto__프로퍼티를 가지는 것은, 생성자 함수 역시 function키워드로 생성된 '인스턴스'이기에 가지는 프로퍼티인 것이죠?(순환하는 것 같아서 여기서부터 머리가 아프네요 ㅠㅠ)

그리고 이렇게 일반적인 생성자 함수로 생성된 인스턴스는 스스로는 생성자 함수가 아니기 때문에 prototype프로퍼티는 가지고 있지 않고, __proto__프로퍼티만을 가지고 있습니다. 

이 __proto__프로퍼티는 인스턴스를 생성한 생성자 함수의 prototype프로퍼티를 참조하고 있고요.

그런데, function키워드로 생성된 function object의 경우, 스스로가 생성자 함수가 아님에도 불구하고 prototype프로퍼티를 가지고 있습니다.

===========================================

잘 이해하지 못한 내용에 대해 여쭤보느라 정리가 잘 안되는데요.

요는 제가 알고 있는 일반적인 생성자 함수와 인스턴스의 관계와 비교하여,

function키워드와 function오브젝트의 관계가 왜 차이를 보이는지에 대한 질문이었습니다

답변 1

답변을 작성해보세요.

0

~~~ function 키워드와 일반적인 생성자 함수의 정확한 차이가 무엇인지 궁금합니다.

==> function 키워드는 액면 그대로 키워드이며 엔진이 해석할 때, function 키워드가 있으면 Function 오브젝트로 생성합니다. function 키워드로 정의한 함수는 생성자 함수도 됩니다. 다만, 함수 하나를 new 연산자로 인스턴스를 만들 필요가 없기 때문에 만들지 않는 것입니다.

또한, new Name()으로 인스턴스를 생성하는 함수 구조를 보면, Name.prototype에 메소드가 연결되어 있습니다. 이 형태에서 new 연산자로 인스턴스를 생성하는 Name 함수를 생성자 함수라고 부르며, 개발자 관례이지만 첫 글자를 대문자로 표기합니다.
--------------------
인스턴스 구조의 답변은 지면으로 설명하기가 어렵습니다.
시간이 되시면 제가 오픈한 "자바스크립트 비기너" 강좌를 들어 보세요. 질문하신 것의 바탕과 논리가 포함되어 있습니다. 알고 계신 것을 정리하는 차원에서 보시면 전반적으로 정리가 될 것 같습니다.