티스토리 뷰
[JS] 내부 메서드 [[Call]]과 [[Construnct]]
함수는 객체이므로 일반 객체와 동일하게 동작한다. 즉, 함수 객체는 내부 슬롯과 내부 메서드를 모두 가지고 있다. 일반 객체와 다른 점은 함수는 호출할 수 있다는 부분이다. function test() {} test
404minda.tistory.com
함수 정의 방식에 따라 함수를 constructor와 non-constructor로 구분한다.
constructor | 함수 선언문, 함수 표현식, 클래스 |
non-constructor | 메서드, 화살표 함수 |
1. constructor
// 함수 선언문
function test() {}
// 함수 표현식
const foo = function() {};
// 메서드로 인정하지 않는 함수
const bar = {
a: function() {}
};
new test();
new foo();
new bar.a();
constructor와 non-consturctor의 구분 법은 정의 방식이다.
함수의 할당 위치가 아닌 정의 방식에 따라 구분된다.
함수 선언문과 함수 표현식만이 constructor로 생성자함수로 사용할 수 있다.
2. non-constructor
주의할 점은 ECMAScript가 메서드로 인정하는 범위가 좁다는 것이다.
ES6에서는 메서드 축약 표현만을 메서드로 인정한다.
화살표 함수와 메서드 축약 표현은 non-constructor이며, 이 경우 [[Construct]]를 갖지 않는다.
// 화살표 함수
const arrow = () => {};
// 메서드(축약 표현)
const test = {
a() {}
}
new arrow(); // TypeError
new test.a(); // TypeError
따라서 non-constructor인 함수 객체를 생성자함수로 호출하면 에러가 발생한다.
3. 주의
위와 같은 성질로 인해 일반 함수를 기대하고 정의한 함수일지라도
new 연산자를 붙이면 생성자 함수처럼 동작할 수 있다.
'Oops, All Code! > 📝 Study Notes' 카테고리의 다른 글
[React] 프레임워크와 라이브러리 차이 (0) | 2023.03.10 |
---|---|
[React] 사용자 인터페이스(UI) (0) | 2023.03.09 |
[JS] 내부 메서드 [[Call]]과 [[Construnct]] (0) | 2023.03.08 |
[JS] 생성자 함수 인스턴스 생성 과정 (0) | 2023.03.07 |
[JS] 생성자 함수와 객체 리터럴의 차이 (0) | 2023.03.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 안성스타필드
- 플리마켓후기
- 경험플리마켓
- 우아한테크코스
- 소사벌맛집
- 대학생팝업스토어
- 타입좁히기
- 프리코스
- 대학생플리마켓
- 회고
- 카페추천
- 도서추천
- 소사벌
- 책추천
- typescript
- 서평
- 어휘력
- 일급객체
- js
- 비즈플리마켓
- javascript
- 프로토타입
- 플리마켓운영
- 트러블슈팅
- 프론트엔드
- 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 |
글 보관함