함수의 구분
- ES6 이전의 함수는 사용 목적에 따라 명확히 구분되지 않는다.
- callable 이면서 constructor다.
ES6에서 함수를 사용 목적에 따라 세 가지 종류로 구분함
- 일반함수: constructor/prototype/arguments
- 메서드: super/arguments
- 화살표 함수: 다 안됨.
1. 메서드
const obj = {
x: 1,
foo() { return this.x; },
bar: function() { return this.x; }
};
- 메서드 축약 표현으로 정의된 함수.
- 인스턴스를 생성할 수 없는 non-constructor다.
- 인스턴스를 생성할 수 없으므로 prototype 프로퍼티가 없고 prototype도 생성하지 않음.
- 자신을 바인딩한 객체를 가리키는 내부 슬롯
[[HomeObject]] 을 가짐. super 참조는 내부 슬롯 [[HomeObject]] 를 사용하여 수퍼클래스의 메서드를 참조하므로 내부 슬롯 [[HomeObject]]를 갖는 ES6 메서드는 super 키워드를 사용할 수 있음.
- ES6 메서드가 아닌 함수는 super 키워드를 사용할 수 없음. 내부 슬롯
[[HomeObject]] 를 갖지 않기 때문.
const base = {
name: 'Lee',
sayHi() {
return `Hi! ${this.name}`
}
}
const derived = {
__proto__: base,
sayHi() {
return `${super.sayHi()}. How are you doing?`;
}
}