티스토리 뷰
1. 생성자 함수
인스턴스를 생성하는 함수다.
* 인스턴스는 생성자 함수를 통해 만들어진 객체를 의미함
일반 함수와 형식 차이가 없는 것이 특징적이다.
new 연산자와 함께 호출하면 해당 함수는 생성자 함수로 동작한다.
new 연산자를 호출하지 않으면 일반 함수로 동작한다.
function Square(side) {
this.side = side;
this.getArea = function() {
return this.side * this.side;
};
}
const square1 = new Square(3); // 생성자 함수
const square2 = Square(5); // 일반 함수
// 일반 함수의 경우 반환문이 없으므로 암묵적으로 undefined를 반환한다.
console.log(square1); // 인스턴스
console.log(square2); // undefined
2. new 연산자
일반 함수와 생성자 함수에 특별한 형식 차이는 없다.
다만, new 연산자 여부에 따라 생성자 함수로 동작할 뿐이다.
https://404minda.tistory.com/67
https://404minda.tistory.com/68
다시 말해 생성자 함수에서는 [[Construct]]가 호출된다.
단, new 연산자와 함께 호출하는 함수가 non-constructor가 아니어야한다.
반대로 new 연산자 없이 생성자 함수를 호출하면 일반 함수로 호출된다.
[[Call]]이 호출되는 것이다.
생성자 함수는 일반적으로 첫 문자를 대문자로 기술하여 일반 함수와 구별해야한다.
3. 생성자 함수와 일반 함수의 차이
// 일반 함수
function plus(a, b) {
return a + b;
}
let test = new plus();
console.log(test); // {}
일반 함수가 생성자 함수로서 호출된 경우 객체를 반환하지 않았으므로 반환문이 무시된다.
따라서 빈 객체가 반환된다.
반대로 new 연산자 없이 생성자 함수로 호출되면 일반 함수로 호출된다.
[[Construct]]가 아닌 [[Call]]이 호출되는 것이다.
// 생성자 함수
function Square(side) {
this.side = side;
this.getArea = function() {
return this.side * this.side;
};
}
const square = Square(4);
console.log(square); // undefiend
console.log(side);
console.log(getArea());
square.getArea(); // TypeError
이 경우 가장 큰 차이점은 함수 내부의 this가 다른 곳에 바인딩된다는 것이다.
예제에서 square은 일반 함수로 호출됐기 때문에 this가 전역 객체 window를 가리킨다.
따라서 side와 getArea 메서드는 전역 객체의 프로퍼티와 메서드가 된다.
함수 호출 방식 | this가 가리키는 값 |
일반 함수로서 호출 | 전역 객체 |
메서드로서 호출 | 메서드를 호출한 객체 |
생성자 함수로서 호출 | 생성자 함수가 생성할 인스턴스 |
'Oops, All Code! > 📝 Study Notes' 카테고리의 다른 글
[JS] new.target과 재귀호출을 통한 생성자 함수 호출 (0) | 2023.03.11 |
---|---|
[React] react란? (0) | 2023.03.11 |
[React] 프레임워크와 라이브러리 차이 (0) | 2023.03.10 |
[React] 사용자 인터페이스(UI) (0) | 2023.03.09 |
[JS] constructor와 non-constructor의 구분 (0) | 2023.03.09 |
- Total
- Today
- Yesterday
- 책추천
- 도서추천
- 카페추천
- 카드뉴스
- 프론트엔드
- 비즈플리마켓
- 어른의어휘공부
- 대학생팝업스토어
- 대학생플리마켓
- 타입좁히기
- javascript
- typescript
- 회고
- 서평
- 어휘력
- 소사벌맛집
- 트러블슈팅
- 도서리뷰
- 프로토타입
- 안성스타필드
- 코딩테스트
- js
- 우아한테크코스
- 일급객체
- 플리마켓후기
- react
- 플리마켓운영
- 경험플리마켓
- 프리코스
- 소사벌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |