bind메소드로 this제어하기

최준영·2021년 10월 19일
0

this가 달라지는 경우


var healthObj = {
  name : "달리기",
  lastTime : "PM10:12",
  showHealth : function() {
    setTimeout(function() {
        console.log(this.name + "님, 오늘은 " + this.lastTime + "에 운동을 하셨네요");      
    }, 1000)
  }
}
healthObj.showHealth();
  • 위처럼 showHealth 내부 setTimeout의 this는 window를 가리킨다.
    • setTimeout이 없다면 healthObj를 가리킨다.
  • 기본적으로 this는 window를 가리킨다.
  • 객체를 통한 호출, new와 함께 호출, bind/call/apply 메서드 사용, 이벤트리스너 콜백 함수 발생시, 화살표 함수 내에사 사용 등의 경우에서 this가 바뀌는 것이다.
  • 참고자료 : https://www.zerocho.com/category/JavaScript/post/5b0645cc7e3e36001bf676eb

bind method


  • bind는 새로운 함수를 반환하는 함수이다.
  • 첫번째 인자로 this를 주어 실행 시점의 this를 내부 함수에게 줄 수 있다.
var healthObj = {
  name : "달리기",
  lastTime : "PM10:12",
  showHealth : function() {
    setTimeout(function() {
        console.log(this.name + "님, 오늘은 " + this.lastTime + "에 운동을 하셨네요");      
    }.bind(this), 1000)
  }
}
healthObj.showHealth();
  • setTimeout내 this는 healthObj를 가리키게 된다.
  • ES6부터는 객체에서 메서드를 사용할 때 function 키워드를 생략할 수 있다.
profile
do for me

0개의 댓글