반응형
SMALL
화살표 함수가 non-constructor(논컨스트럭터) 구조인 이유는 다음과 같습니다:
- 생성자 함수로 사용할 수 없음: 화살표 함수는 new 키워드와 함께 사용할 수 없습니다. 생성자 함수로 사용하려고 하면 에러가 발생합니다. 화살표 함수는 인스턴스를 생성하거나 초기화하는 데 사용할 수 없습니다.
- this 바인딩: 화살표 함수는 자체적으로 **this**를 가지지 않고, 외부 스코프(함수나 블록)의 **this**를 상속받습니다. 이로 인해 화살표 함수 내부에서 **this**를 수정할 수 없습니다. 이 특성은 일반적인 함수와 다릅니다.
예제를 통해 살펴보겠습니다:
function regularFunction() {
this.value = 42;
}
const arrowFunction = () => {
this.value = 42; // 에러 발생
};
const obj1 = new regularFunction();
console.log(obj1.value); // 42
const obj2 = new arrowFunction(); // 에러 발생
위의 코드에서 **regularFunction**은 생성자 함수로 사용할 수 있으며 new 키워드와 함께 호출하면 객체를 생성합니다. 반면에 **arrowFunction**은 생성자 함수로 사용할 수 없으므로 **new**와 함께 호출하면 에러가 발생합니다.
그러나 화살표 함수가 항상 non-constructor 구조라는 것에는 반례도 있습니다. 화살표 함수는 다음과 같은 상황에서 예외적으로 constructor로 사용될 수 있습니다:
class ExampleClass {
constructor() {
this.value = 42;
this.createArrowFunction();
}
createArrowFunction() {
this.arrowFunction = () => {
console.log(this.value); // 42
};
}
}
const instance = new ExampleClass();
instance.arrowFunction(); // 42
위의 코드에서 createArrowFunction 메서드 내부에서 화살표 함수를 생성하고, 이 화살표 함수는 **this**를 올바르게 상속받습니다. 이런 경우에는 화살표 함수가 생성자 함수 내부에서 사용되지만, 해당 생성자 함수가 클래스로 정의되었으며 **this**가 제대로 연결되어 동작합니다. 이것은 클래스의 메서드를 작성할 때 일반적으로 사용되는 패턴 중 하나입니다.
728x90
반응형
LIST
'javascript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
전역객체 (0) | 2024.02.02 |
---|---|
프로토타입 체인 (0) | 2024.02.02 |
const 키워드의 객체 (0) | 2024.02.02 |
호이스팅 (0) | 2024.02.02 |
일급 객체 (0) | 2024.02.02 |