모든 함수는 callable이면서 constructor이다.
즉, 호출가능하며, 생성자함수로 사용이 가능하다.
const person = {
say: function (){
console.log("Hello");
}
}
// callable
person.say();
// constructor
new person.say();
메서드 축약 표현으로 정의한 함수와 화살표 함수는 [[Constructor]]
와 [[Prototype]]
이 없다.
대신 [[HomeObject]]
가 존재해서 super
가 사용이 가능하다. ( 상속받았을 경우 )
const parent = {
say() {
return "Hello";
}
}
const children = {
__proto__: parent,
say(){
return super.say() + ", Hi";
}
}
this
, arguments
, super
, new.target
값을 가지지 않음lexical this
를 가짐기본적으로 this
값은 동적으로 결정된다.
그 의미는 함수 정의시점에서 결정되는 것이 아닌, 함수 호출시점에서 결정된다는 의미이다.
여기서 화살표함수의 this
는 한가지 더 특이한 점을 가지는데 바로 자체적인 this
값을 가지지 않는다는 것이다.
자체적인 this
를 가지지 않고 상위 스코프의 this
값을 그대로 참조한다. 이것을 렉시컬 this라고 부른다.