-
[JS] Constructor FunctionWeb/JS 2022. 5. 6. 15:50SMALL
*freecodecamp 를 기반으로 작성하였다.
Constructor Function
컨스트럭터(Constructor)는 새로운 객체를 만드는 함수이다.
이것은 새로운 객체에 속하는 프로퍼티나 기능을 정의한다.
function Bird() { this.name = "Albert"; this.color = "blue"; this.numLegs = 2; } let bluebird = new Bird;
위의 컨스트럭터는 Bird라는 객체를 name, color, numLegs라는 프로퍼티들로 각각 정의하였다.
컨스트럭터는 다음과 같은 컨벤션을 따른다.
- 컨스트럭터는 컨스트럭터가 아닌 다른 함수와 구분하기 위해 함수 이름 첫 문자를 대문자로 정의한다.
- 컨스트럭터는 만들어질 객체의 프로퍼티를 세팅하기 위해 this 를 사용한다. 컨스트럭터 내부에서 this는 만들어질 새로운 객체를 의미한다.
- 컨스트럭터는 프로퍼티나 행동(behavior)를 정의한다. (다른 함수들이 값을 리턴하는 것과 달리)
컨스트럭터안에 있는 this는 만들어지는 객체를 가리킨다.
new 라는 오퍼레이터는 컨스트럭터를 부를 때 사용된다.
이것은 자바스크립트한테 Bird의 새로운 인스턴스인 bluebird를 만들라고 말해주는 것이다.
new가 없으면, 컨스트럭터 안의 this는 새롭게 만드러진 객체를 가리키지 못하여 예상밖의 결과를 가져올 수 있다.
저렇게 bird에서 만들어진 새로운 인스턴스인 bluebird는 bird 컨스트럭터가 가진 모든 프로퍼티를 가지게 된다.
blueBird.name; blueBird.color; blueBird.numLegs; blueBird.name = 'Elvira'; blueBird.name; //다른 객체와 같이 프로퍼티에 접근과 수정이 가능하다.
그런데, 우리는 blueBird 뿐만 아니라 여러 특색을 가진 많은 새들을 만들길 원할 것이다.
그럴 때마다 Bird의 프로퍼티를 수정하려면 정말 귀찮을 것이다.
더 많은 종류의 Bird 오브젝트를 쉽게 만들기 위해선, Bird 컨스터럭터에 파라미터를 받도록 하면 된다!
function Bird(name, color) { this.name = name; this.color = color; this.numLegs = 2; }
그러면 파라미터에 들어간 인자가 Bird 컨스턱터에서 새로운 특성을 가진 또다른 객체를 만들어낼 수 있다.
let cardinal = new Bird("Bruce", "red");
이렇게 언제든지 컨스터럭터는 새로운 객체를 만들 수 있고 그렇게 컨스터럭터로부터 만들어진 객체를 인스턴스(instance)라고 부른다.
자바스크립트는 instanceof 라는 오퍼레이터를 통해 이 객체가 특정 컨스트럭터의 인스턴스인지 확인할 수 있는 기능을 제공한다!
function House(numBedrooms) { this.numBedrooms = numBedrooms; } // Only change code below this line let myHouse = new House(2); myHouse instanceof House; //true
인스턴스가 맞다면 true, 아니면 false를 리턴한다.
반응형'Web > JS' 카테고리의 다른 글
[JS] Closure (0) 2022.05.12 [JS] 정규표현식(Regular Expressions) (0) 2022.02.11 [JS] 소수점을 버리고 자연수를 얻는 방법 (0) 2022.01.17