April 21, 2021
var someone = {
name: 'jessie',
whoAmI: function() {
console.log(this);
}
};
someone.whoAmI(); // 출력결과: {name: "jessie", whoAmI: function}
var myWhoAmI = someone.whoAmI;
myWhoAmI(); // 출력결과: Window
someone.whoAmI
함수를 새로운 변수에 담아서 마지막 줄과 같이 실행할 경우, 함수 내의 this는 Window
객체가 된다.someone.whoAmI();
에서 호출한 애는 someone
이 되기 때문에 this는 someone
이다.myWhoAmI();
에서 호출한 애는 global이 되기 때문에 this는 Window
다. (브라우저 기준)var someone = {
name: 'jessie',
whoAmI: function() {
console.log(this);
}
};
var btn = document.getElementById('btn');
btn.addEventListener('click', someone.whoAmI); // 출력결과: <button id="btn>...</button>
btn
에다가 someone.whoAmI
함수를 넘긴 것이다. 여기에서 함수를 호출을 한 것이 아니다.btn
이 click 되었을 때 이 함수가 호출되는데, 이 때 함수를 호출한 애는 btn
이 된다.var someone = {
name: 'jessie',
whoAmI: function() {
console.log(this);
}
};
var myWhoAmI = someone.whoAmI;
var bindedWhoAmI = myWhoAmI.bind(someone);
bindedWhoAmI(); // 출력결과: {name: "jessie", whoAmI: function}
var btn = document.getElementById('btn');
btn.addEventListener('click', bindedWhoAmI); // 출력결과: {name: "jessie", whoAmI: function}
bind(someone)
를 이용하면 이 함수 내에서 this는 someone
으로 고정된다.