• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

머릿속이 꼬여서 도움을 청합니다.

21.01.29 17:07 작성 조회수 111

0

안녕하세요. 

수강 중 본의아니게 머리가 꼬여 구글링을 열심히 해보았지만 명쾌한 답을 찾지 못하여 이렇게 여쭙게 되었습니다.

질문 1)

Function()과 new Function()이 같다고 하셨습니다.

그렇다면 대문자 Function() 문법과 소문자 function()문법의 차이는 파라미터 작성법이 끝인가요?? 용도나 쓰임, 활용의 차이가 따로 있나요??

질문 2)

var f1 = function(){};

var f2 = new f1;

console.log(Object.prototype.toString.call(f1));

console.log(Object.prototype.toString.call(f2));

var s1 = String;

var s2 = new s1;

console.log(Object.prototype.toString.call(s1));

console.log(Object.prototype.toString.call(s2));

---실행값----

[object Function]

[object Object]

[object Function]

[object String]

이렇게 나오는 걸 확인할 수 있었습니다.

위 단락과 아래 단락이 차이나는 이유를 알 수 있을까요??

제 생각의 회로는 이러합니다. s2가 s1이라는 오브젝트의 인스턴스이므로 s2도 Object의 오브젝트라고 생각했습니다.

내부적으로 이해 해보고 싶은데 많이 수준이 부족한 것 같아 이렇게 도움을 청합니다.

답변 1

답변을 작성해보세요.

0

그렇다면 대문자 Function() 문법과 소문자 function()문법의 차이는 파라미터 작성법이 끝인가요?? 용도나 쓰임, 활용의 차이가 따로 있나요??
대문자 Function()은 Number()와 같이 오브젝트입니다. Function()을 실행하면 생성자 함수(constructor)를 호출하여 Function 오브젝트(인스턴스)를 생성합니다. 이때 파라미터에 함수 블록{}의 코드와 함수에 넘겨준 파라미터를 문자열로 작성할 수 있습니다.
 function()도 마찬가지로 Function 오브젝트(인스턴스)를 생성합니다. 다만 함수 블록의 코드를 블록에 직접 작성합니다. 이것을 기준으로 다시 강좌를 들어보면 정리가 될 것입니다.
--------------------
두 번째는 toString() 메소드의 목적에 맞지 않게 사용했기 때문에 혼동된 것입니다. toString()은 문자열로 바꾸기 위한 것으로, 오래전에는 오브젝트 타입을 알기 위해 2번과 같은 코드를 사용하여 실행값처럼 값을 구한 후, 정규표현식으로 object를 분리하여 값을 구했지만, 지금은 자바스크립트에서 제공하는 것으로 타입을 알 수 있습니다. 이것은 ES6에서 나오니 지금은 덮어두고 넘어가도 됩니다. 구조 파악을 위한 것이라면 1번의 질문을 이해한 후, 진행하면서 정리하면 될 것입니다.