October 16, 2021
콜백 함수가 일반 함수로 호출된다면 콜백 함수의 내부의 this에는 전역객체가 바인딩된다(자바스크립트 딥다이브 22.2.1 일반 함수 호출
참고)
function Person(name) {
this.name = name;
this.getName = function() {
setTimeout(function() {
console.log('this ? ', this);
console.log('this.name ? ', this.name);
}, 1000);
};
}
const heaeun = new Person('heaeun');
heaeun.getName();
/*
this ? Window {0: Window, window: Window, self: Window, document: document,
name: '', location: Location, …}
*/
// this.name ? ''
bind
메서드를 사용하여 인스턴스 객체가 바인딩된 this
를 명시적으로 바인딩한다
function Person(name) {
this.name = name;
this.getName = function() {
setTimeout(
function() {
console.log('this ? ', this);
console.log('this.name ? ', this.name);
}.bind(this), // this의 명시적 바인딩
1000
);
};
}
const heaeun = new Person('heaeun');
heaeun.getName();
// this ? Person {name: 'heaeun', getName: ƒ}
// heaeun
arrow function
내부의 this
는 상위 스코프의 this
를 바인딩합니다
function Person(name) {
this.name = name;
this.getName = function() {
setTimeout(() => {
console.log('this ? ', this);
console.log('this.name ? ', this.name);
}, 1000);
};
}
const heaeun = new Person('heaeun');
heaeun.getName();
// this ? Person {name: 'heaeun', getName: ƒ}
// this.name ? heaeun
arrow function
혹은 bind
메서드를 사용하면 됩니다