Oops, All Code!/📝 Study Notes
[JS] 내부 메서드 [[Call]]과 [[Construnct]]
밍동망동
2023. 3. 8. 00:00
함수는 객체이므로 일반 객체와 동일하게 동작한다.
즉, 함수 객체는 내부 슬롯과 내부 메서드를 모두 가지고 있다.
일반 객체와 다른 점은 함수는 호출할 수 있다는 부분이다.
function test() {}
test(); // [[Call]] 호출
new test(); // [[Construct]] 호출
함수가 일반 함수로 호출되면 내부 메서드 [[Call]]이 호출되며
new 연산자와 함께 호출되면 내부 메서드 [[Construct]]가 호출된다.
1. Call
[[Call]]을 갖는 함수 객체를 callable이라 한다.
callable은 호출할 수 있는 객체인 함수를 말한다.
호출할 수 없는 객체는 함수 객체가 아니기 때문에 함수 객체는 반드시 callable이어야한다.
모든 함수 객체는 내부 메서드 [[Call]]을 갖고 있기 때문에 호출 가능한 것이다.
2. Construct
내부 메서드 [[Construct]]를 갖는 객체를 constructor,
[[Construct]]를 갖지 않는 함수 객체를 non-constructor라고 부른다.
constructor는 생성자 함수로서 호출할 수 있는 함수이며,
non-constructor는 객체를 생성자 함수로서 호출할 수 없는 함수를 의미한다.
모든 함수 객체가 [[Construct]]이진 않다.
3. 결론
모든 함수 객체는 호출 가능하나 모든 함수 객체를 생성자 함수로서 호출할 수 있는 것은 아니다.