-
17 생성자 함수에 의한 객체 생성모던 자바스크립트 딥 다이브 독학 2023. 10. 14. 07:37
Object 생성자 함수
new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다.
const person = new Object();
생성자 함수란? new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수
인스턴스란? 생성자 함수에 의해 생성된 객체
Object 생성자 함수를 사용해 객체를 생성하는 방식은 그다지 유용하지 않다.
생성자 함수
객체 리터럴에 의해 객체를 생성하는 경우 프로퍼티 구조가 동일함에도 불구하고 매번 같은 프로퍼티와 메서드를 기술해야 하는 반면, 생성자 함수에 의한 객체 생성 방식은 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다.
생성자 함수의 역할은 프로퍼티 구조가 동일한 인스턴스를 생성하기 위한 템플릿으로서 동작하여 인스턴스를 생성하는 것과 생성된 인스턴스를 초기화하는 것이다.
인스턴스 생성과 this 바인딩 → 생성자 함수에 의해 만들어진 암묵적인 빈 객체(인스턴스)는 this에 바인딩된다. 이 과정은 런타임 이전에 실행된다.
생성자 함수 내부의 모든 처리가 끝나면 완성된 인스턴스가 바인딩된 this가 암묵적으로 반환된다. 만약 this가 아닌 다른 객체를 명시적으로 반환하면 this가 반환되지 못하고 return 문에 명시한 객체가 반환된다. 명시적으로 원시 값을 반환하면 원시 값 반환이 무시되고 this가 암묵적으로 반환된다.
모든 함수 객체는 callable이지만 모든 함수 객체가 constructor인 것은 아니다.
function foo() {} //일반적인 함수로서 호출: Call이 호출된다. foo(); //생성자 함수로서 호출: Construct가 호출된다. new foo(); constructor: 함수 선언문, 함수 표현식, 클래스 non-constructor: 메서드(ES6 메서드 축약), 화살표 함수
new 연산자와 함께 호출하는 함수는 constructor이어야 한다.
Object와 Function 생성자 함수는 new 연산자 없이 호출해도 new 연산자와 함께 호출했을 때와 동일하게 동작한다.
String, Number, Boolean 생성자 함수는 new 연산자와 함께 호출했을 때 객체를 생성하여 반환하지만 new 연산자 없이 호출하면 문자열, 숫자, 불리언 값을 반환한다. 이를 통하여 데이터 타입을 변환하기도 한다.
'모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글
19 프로토타입 (0) 2023.10.16 18 함수와 일급 객체 (0) 2023.10.15 16 프로퍼티 어트리뷰트 (0) 2023.10.13 15 let, const 키워드와 블록 레벨 스코프 (1) 2023.10.12 14 전역 변수 (0) 2023.10.11