7장에서 {} 표기법이나 다음과 같은 표현을 사용하여 빈 객체를 새로 생성하는 방법을 설명했었다.
또한, 이와 비슷한 문법을 사용하여 자바스크립트의 다른 객체들을 생성하는 방법도 알아보았다.
var today = new Date();
이와 같이, new 연산 뒤에는 항상 함수 호출이 따라와야 한다.
new 연산자는 아무 프로퍼티도 없는 새 객체 하나를 생성한 후 new 연산자 뒤에 있는 함수를 호출하고,
this 키워드가 새로 생성된 객체를 가리키게 한다.
이런 식으로, new 연산자와 함께 사용되도록 설계된 함수를 생성자 함수라고 하거나 간단하게 생성자라고
부른다. 생성자는 새로운 객체를 초기화하고, 객체에 있는 프로퍼티 중에서 사용되기 전에 미리 할당되어야 하는 프로퍼티들의 초기값을 할당한다.
자바스크립트에서는 간단하게 this가 가리키는 객체에 몇 가지 프로퍼티들을 추가하는 여러분만의 생성자
함수를 정의할 수 있다. 다음 코드는 생성자를 정의한 후 새로운 객체를 두 개 생성하기 위하여 new 연산자와 함께 생성자를 두 번 호출하는 예다.
// 'this'와 연관되어 있는 객체를 초기화 하는 방법을 주의해서 보라.
function Rectangle(w, h) {
this.height = h;
// Rectangle 객체를 두 개 만들기 위해서 생성자를 호출한다.
// 생성자가 새 객체를 각각 적절히 초기화할 수 있게 너비와 높이를 인자로 넘겨준다.
var rect1 = newRectangle(2, 4); // rect1 = { width:2, height:4 };
var rect1 = newRectangle(8.5, 11); // rect2 = { width:8.5, height:11 };
주어진 인자를 사용하여, this가 가리키는 객체의 프로퍼티들을 생성자가 어떻게 초기화하는지 주의 깊게
살펴보라. 위의 예에서 여러분은 단지 적절한 생성자 함수를 정의하는 방법으로 객체들의 클래스를 만들었다.
Rectangle() 생성자를 사용하여 만드는 모든 객체에는 width와 height라는 프로퍼티가 있다.
여러분들은 이런 방식으로 프로그램을 작성할 수 있으며, 모든 Rectangle 객체를 동일한 방법으로 다룰 수
있다. 생성자는 객체들의 클래스를 정의하기 때문에 생성자가 만들게될 객체들의 클래스를 분명히 표현할 수 있게 이름 짓는 것이 좋다. 예를 들어, 사각형 객체를 생성할 때 new init_rect(1,2) 보다 new Rectangle(1,2)를 사용하는 것이 훨씬 더 직관적이다.
생성자 함수에는 일반적으로 반환값이 없다. 다시 말해, 생성자 함수는 this 키워드가 가리키는 객체를 초기화시킬 뿐 아무런 값도 반환하지 않는다. 하지만 생성자 함수에서 결과값으로 객체를 반호나하면 반환값을 가실 수 있으며, 이때 반환되는 객체는 new 문장의 결과값이 된다. 그리고 생성자 않의 this가 가리키고 있던 객체는 폐기된다.
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드 - 9.3 자바스크립트의 클래스 시뮬레이션 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 9.2 프로토타입과 상속 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 8.9 Function() 생성자 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 8.8 함수 유효 범위와 클로저 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 8.5 생성자 함수, 8.6 함수 프로퍼티와 메서드 (0) | 2010.07.04 |