April 21, 2021
var someone = {
name: 'jessie',
whoAmI: function() {
console.log(this);
}
};
someone.whoAmI(); // 출력결과: {name: "jessie", whoAmI: function}
var myWhoAmI = someone.whoAmI;
myWhoAmI(); // 출력결과: Windowsomeone.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으로 고정된다.