JavaScript

this

fromslow 2020. 7. 24. 16:51

binding : 호출한 대상에 실제함수를 연결 짓는 것
올바른 객체에 올바른 메서드 묶어주기(매칭 시키기)

전역 객체 : 코드전체를 아우르는 객체
-window 객체 : 브라우저에서의 전역객체

-global 객체 : 서버사이드 환경(node.js)에서의 전역객체

 

 

 

<바인딩 되는 경우의 수>


1. 일반함수를 호출했을 때 this는 어디로 바인딩 되느냐
→일반함수의 호출과정에서의 this는 전역객체를 의미한다.


2. 객체를 호출했을때 this는 어디로 바인딩 되느냐
→객체의 메소드에서 사용된 this는 그 메소드를 호출한 객체로 바인딩 된다.

 


3. 생성자 함수를 호출했을때 this는 어디로 바인딩 되느냐
생성되어 반환되는 객체에 바인딩

 

 

어떤 클래스 안에 있는 함수를 다른 콜백으로 전달할 때의 this는 그 함수가 포함되어져 있는 클래스의 정보가 사라진다.

그래서 클래스와 함수를 묶을 수 있는 bind()메서드를 써서 바인딩해주거나

this.onClick  = this.onClick.bind(this)

변수로 화살표 함수를 할당하면 해결된다.

onItemClick = (item) => {
    //동작
  };



*
생성자 함수 this vs 일반 함수 this

똑같이 생겼어도
new로 새로운 객체를 만들면 생성자 함수
new 없이 그냥 호출되어 쓰이면 일반 함수

 

 

 

**
내부함수의 this


내부함수에서의 this는 무조건 전역 객체(window)에 바인딩 된다.
-일반함수 : 함수 안에 또 다른 함수

-객체 내부 함수 : 객체 메소드 안에 선언된 또 다른 함수

-생성자 내부 함수 : 생성자 함수 안에 또 다른 함수