자바스크립트 생성자에 관해 질문이 있습니다..

gyunn의 이미지

   function Users() {
        function Person (name) {
            console.log(this + ' : this is constructor');
        }
 
        Person.query = function() {
            console.log('this is query!');
        }
        console.log(Person); // 생성자 함수 Person 출력됨.
        return Person;
    }
 
 
    var temp = new Users();
    console.log(temp);
 
    temp.query();

코드는 위와 같습니다.

Person 객체를 반환하는 코드가 Person 생성자 함수 밖에 있는 코드인데... 이해가 잘 안되네요.

return Person전에 Person을 출력해봤는데 function Person () { ..... } 이 출력되구요

제가 기대한 값은 Person 객체의 프로퍼티나 메소드 정보 (query에 대한 정보가 포함된) 들이 나오는 것이였는데요.

반환되는건 function Person() {...} 이란 건데

어떻게 이걸로 temp.query 구문이 실행될 수 있는거죠?

혹시 이 현상을 설명해주시거나.... 제가 답을 찾을 수 있도록 도움을 주셨으면 합니다.

peecky의 이미지

1. Person 객체가 아니라 Person 함수를 반환하고 있습니다.

2. Person.query가 함수고, temp가 Person이므로 temp.query()를 실행하는데 문제가 없습니다.

3. 코드의 의도는 잘 모르겠습니다만, Person 객체를 생성하려면 new Person() 이라고 해야죠.

gyunn의 이미지

답변해주셔서 감사합니다 ^^