타쿠꺼

생성자 함수 본문

Javascript/Study

생성자 함수

kimtaku 2016. 5. 29. 04:19

자바스크립트에서 생성자 함수는 함수에 new를 붙이면 그것이 생성자 함수가 된다. 가령, 어떤 함수 func이 선언되었다면


var foo = new func();


과 같이 사용하면 func함수가 생성자함수로 작동하여 객체를 반환시킨다.

이 때, 생성자 함수에 return을 명시할 필요는 없다. 다만, 명시적으로 객체를 반환시키는 경우엔 해당 객체를 반환시키며, 객체가 아닌 String, Number, Boolean 등을 반환시키면 해당 반환은 무시하고 this가 바인딩된 객체를 반환시킨다.

작동 메커니즘은 다음과 같다.


1. 함수가 new와 함께 호출되면, 빈 객체를 생성한다.

2. 해당 객체에 this를 바인딩 시킨다.

3. 함수가 실행된다.

4. 해당 객체를 반환한다.


따라서 생성자 함수는 내부적으로 this를 사용하여 매개변수를 처리하면 된다.


1
2
3
function func(name) {
    this.name = name;
}
cs



위와 같이 작성하면, 빈 객체를 생성하고 해당 객체의 name프로퍼티에 매개변수로 받은 name을 넣는 것이다.

생성자 함수는 어떤 함수에도 사용이 되므로, 생성자 함수로 설계되지 않은 함수가 생성자 함수로 사용될 여지가 있다.

따라서 보통 생성자 함수는 첫글자를 대문자로 하는 관습이 있다.

또, 생성자 함수임에도 불구하고 new 키워드를 사용하지 않아 일반 함수처럼 호출하면 return값이 없기 때문에 undefiend가 반환되므로, 이를 막기 위해 다음과 같이 작성한다.


1
2
3
4
5
function A(arg) {
    if (!(this instanceof A))
        return new A(arg);
    this.value = arg ? arg : 0;
}
cs


2라인을 보자. 생성자 함수로 사용되지 않은 경우, this는 전역객체인 window로 바인딩 된다. 따라서 this instanceof A는 false가 되기 때문에, 강제적으로 A를 생성자 함수로써 사용하고 그 값을 리턴해준다.

그리고 생성자함수로써 제대로 사용이 되었다면, 매개변수 값인 arg를 반환하고 만약 매개변수가 없으면 0값을 반환하는 조치도 취해놓은 것을 4라인에서 볼 수 있다.


여기서 2라인의 A는 arguments.callee 로써 표현될 수도 있다. arguments.callee가 호출되는 함수 정보를 갖고 있기 때문에, 여러 함수에 걸쳐 사용할 수 있다.

'Javascript > Study' 카테고리의 다른 글

코드의 실행 과정  (0) 2016.06.01
동적스코프, 정적스코프  (0) 2016.06.01
난수 만들기  (0) 2016.05.31
프로토타입, 체이닝  (0) 2016.05.29
this 바인딩  (0) 2016.05.29
Comments