Javascript 의 this

Doyoon Lee·2020년 12월 7일
0

Javascript

목록 보기
23/23
post-thumbnail

대부분의 경우 this의 값은 함수를 호출한 방법에 의해 this에 저장되는 대상이 달라진다.

this 는 실행 컨텍스트가 생성될 때 함께 결정된다.

함수 : 그 자체로 독립적인 기능을 수행
메서드 : 자신을 호출한 대상 객체에 관한 동작을 수행

1. 전역 공간에서의 this

  • this 는 window (전역 객체)

2. function을 함수로서 호출할 때 내부의 this

  • 함수로서 호출하는 것은 호출 주체를 명시하지 않고 개발자가 코드에 관여해서 실행한 것이기 때문에 this는 전역객체이다.
  • 함수 내부에서 그 함수를 this 로 만들려면? 변수를 활용해서 this 를 담는 방법. 보통 self 를 사용한다.

3. function을 매서드로서 호출할 때 그 메서드 내부에서의 this

  • 메서드로서 함수를 호출하는 것은 함수가 객체의 속성으로 호출된 것이다.
  • this 에는 호출한 주체에 대한 정보가 담긴다. 쉽게 말해 메서드 앞의 객체이다.

4. call() apply() 함수를 이용해 호출된 function

  • call과 aplly 함수는 function 객체의 기본 함수이다.
  • 둘의 차이는 함수에 넘겨줄 인자를 따로 넘겨주느냐 배열로 넘겨주느냐의 차이
  • 보통 다른 객체에 이미 할당되어 있는 함수(메서드)를 호출하는 해당 객체에 재할당할 때 사용된다.
  • 첫번 째 인자로 받는 객체를 this로 만든다. 따로 인자를 주지 않으면 this는 전역 객체가 된다.

5. 콜백 함수 호출 시 그 함수 내부에서의 this

6. 생성자 함수로서 호출된 경우 내부에서의 this

어떤 함수가 생성자 함수로서 호출되면 (new 명령어와 함께 호출된 경우) 내부에서의 this는 곧 새로 만들 구체적인 인스턴스 자신이 된다.

6번 속성 덕분에 인스턴스의 프로토타입 초기화를 할 때 쓸 수 있다.

function Person (name, blog) {
	this.name = name
	this.blog = blog
}
const Doyoon = new Person("도윤", "http://~~");

화살표 함수의 this

화살표 함수를 언제 쓰지 말아야할까?

화살표 함수 내부에는 this가 아예 없다. 화살표 함수 내에서 스코프 체인 상에서 가장 가까운 this 를 가져와서 쓰기 때문에, this를 함수 내부에서 써야할 일이 있을 경우에는 화살표 함수로 정의내리면 안될 것이다.

예를 들면 Constructor 생성자 함수를 정의할 때. 보통 this 로 초기화를 할 수 있기 때문에 화살표 함수로 쓰면 안 될 것.

function 표현에 비해 구문이 짧고 자신의 this, arguments, super 또는 new.target을 바인딩 하지 않는다. 화살표 함수는 항상 익명이고, 이 함수 표현은 메소드 함수가 아닌 곳에 가장 적합하다. 그래서 생성자로서 사용할 수 없다.

⇒ 화살표 함수를 사용해서 정의한 함수는 new를 사용해서 생성자로서 사용할 수 없다.

0개의 댓글