Recent Posts
Recent Comments
Link
Today
Total
05-20 06:06
관리 메뉴

채린씨의 티스토리

[JavaScript] 34. 생성자 본문

자료구조, 알고리즘/JavaScript 기초 문법

[JavaScript] 34. 생성자

채린씨 2022. 3. 13. 22:51

* 생성자 함수

- 유사한 객체를 다중으로 생성할 때 사용되는 함수 (타 언어의 class 개념과 유사)

- 일반적으로 생성자 함수의 첫 글자는 대문자로 시작

- 생성자 함수로 객체 생성 시 키워드 new를 이용

// 붕어빵 틀 (생성자 함수)
function FishBread(flavor, price) {
  this.flavor = flavor;
  this.price = price;
  this.base = "flour";
}

// 붕어빵 틀로 찍어낸 붕어빵들 (객체들)
let bread_1 = new FishBread("redbean", 1000);
let bread_2 = new FishBread("cream", 1200);
let bread_3 = new FishBread("pizza", 1500);

console.log(bread_1);
// output: FishBread { flavor: 'redbean', price: 1000, base: 'flour' }
console.log(bread_2);
// output: FishBread { flavor: 'cream', price: 1200, base: 'flour' }
console.log(bread_3);
// output: FishBread { flavor: 'pizza', price: 1500, base: 'flour' }

 

* new.target

- new.target 속성(property)을 사용하여 키워드 new로 객체를 생성했는지 여부 확인 가능

// 붕어빵 틀 (생성자 함수)
function User(name) {
  console.log(new.target);
  this.name = name;
}

// 키워드 new를 사용하지 않음 (new.target은 undefined를 반환)
let result_1 = User("John");
console.log(result_1);
/* output:
undefined
undefined
*/

// 키워드 new를 사용 (new.target은 이 객체를 생성할 때 사용된 생성자 함수를 반환)
let result_2 = new User("John");
console.log(result_2);
/* output: 
[Function: User]
User { name: 'John' }
*/

- 혹시나 키워드 new를 깜빡했더라도 제대로 객체가 생성되도록 하려면..?

// 붕어빵 틀 (생성자 함수)
function User(name) {
  if (!new.target) {
    // new.target이 undefined일 경우.
    // 즉, 키워드 new를 사용하지 않고 객체를 생성할 경우 키워드 new를 붙여줌
    return new User(name);
  }
  this.name = name;
}

// 키워드 new를 사용하지 않음 (new.target은 undefined를 반환)
// 그러나 생성자 함수 내에서 키워드 new를 붙여 제대로 객체를 만들어줌
let result_1 = User("John");
console.log(result_1);
// output: User { name: 'John' }

// 키워드 new를 사용
let result_2 = new User("John");
console.log(result_2);
// output: User { name: 'John' }

 

 

 

 

'자료구조, 알고리즘 > JavaScript 기초 문법' 카테고리의 다른 글

[JavaScript] 36. Map  (0) 2022.03.14
[JavaScript] 35. Collection  (0) 2022.03.13
[JavaScript] 33. 그 외 고차함수  (1) 2022.03.13
[JavaScript] 32. 고차함수  (0) 2022.03.13
31. 배열 탐색 - 변형  (0) 2022.03.12
Comments