• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

마지막 예제 질문드립니다.

20.12.19 19:58 작성 조회수 100

1

일반적으로 this는 함수 호출을 할 때, 일종의 규칙들을 따라 this 바인딩이 일어나잖아요.

arrow function에서의 this는 함수 호출시, 호출부가 아니라, 호출시에 lexical scope에 따라 this가 바인딩 된다고 알고 있습니다.

마지막예제는 객체내부의 메서드를 호출할때, this는 전역을 가리키기 때문에 그렇겠죠. 

하지만 리액트에서 아래와 같이 this 바인딩을 하기도 하잖아요? 

class Foo {

  bar = () =>{  }

}

이 경우는 그냥 일반적인 생성자 함수(객체 생성) 규칙에 의해서 생성된 객체를 this로 가리키기 때문에 바인딩이 되는것인가요? 헷갈리네요 갑자기..

답변 1

답변을 작성해보세요.

0

안녕하세요
화살표 함수의 this 는 화살표 함수의 호출 시 상황과는 무관하게 함수 정의 시점에 하나로 고정됩니다
(가장 가까운 일반 함수의 this 로 고정)

`class Foo` 는 (this 를 결정할 때) `function Foo` 와 같습니다
자바스크립트의 class 는 결국 일반 함수와 프로토타입으로 이루어져 있거든요

즉, bar 함수의 this 는 `new Foo()` 를 실행할 때 생성된 this 로 고정이 됩니다
(가장 가까운 일반 함수가 Foo 이므로)