[Deepdive] 22장 this

반응형

📍 22장 this

this란?

메서드를 정의하는 시점 이 객체를 생성하는 시점보다 먼저오게되 자신을 호출할 객체의 값을 this 로 표현한다.

즉, 자신이 속한 객체 / 자신이 생설할 인스턴스를 가르키는 참조변수 이다.

this 바인딩

this바인딩은 함수가 호출되는 방식에따라 동적으로 결정된다.

  • 일반함수 호출 → 전역객체
  • 전역 호출 → 전역객체
  • 메서드내부 호출→ this를 호출한 객체
  • 생성자 함수 호출→ 생성자함수가 생성할 인스턴스
  • Function.prototype.apply/call/bind 메서드에 의한 간접 호출

this 명시적 변경

  1. Function.prototype.apply(thisArg[, argsArray])thisArg로 변경, 호출할 함수에 전달할 인수를 두 번째 매개변수에 배열로 만들어서 넣기 ( 함수호출 )
  2. Function.prototype.call(thisArg[, arg1, arg2, ...])thisArg로 변경, 호출할 함수에 전달할 인수를 두 번째 매개변수부터 넣기 ( 함수호출 )
  3. Function.prototype.bind(thisArg)this값을 thisArg로 변경한 함수를 리턴
// arguments가 유사배열이라 배열메서드 사용이 불가능해서 배열메서드를 빌려쓰기위한 코드

// apply 배열로 전달
function sum(){
  return Array.prototype.reduce.apply(arguments, [(p, c) => p + c, 0]);
}
console.log(sum(1, 2, 3, 4));    // 10

// call 하나씩 인수로 전달
function sum(){
  return Array.prototype.reduce.call(arguments, (p, c) => p + c, 0);
}
console.log(sum(1, 2, 3, 4));    // 10

// bind 새로운 함수 반환
function sum(){
  return Array.prototype.reduce.bind(arguments, (p, c) => p + c, 0);
}
console.log(sum(1, 2, 3, 4)());    // 10
반응형

'프론트엔드 > JavaScript' 카테고리의 다른 글

[21일] JS 실행컨텍스트  (1) 2022.11.29
[16일차] SPA  (2) 2022.11.21
[Deepdive] 21장 빌트인객체  (0) 2022.04.11
[Deepdive] 20장 use strict  (0) 2022.04.11
[Deepdive] 19장 프로토타입  (0) 2022.04.07