자바스크립트에서의 this는 꽤나 중요한 개념이다.
우선 this를 사용하는 간단한 예제 코드는 다음과 같다.
function Person(name, age) {
this.name = name;
this.age = age;
}
const dumbo = new Person('dumbo', 20);
console.log(dumbo.name); // dumbo
console.log(dumbo.age); // 20
자바스크립트에서는 위와 같이 함수안에서 this를 사용할 수 있습니다.
dumbo에 new키워드를 이용해 인스턴스를 생성했고 매개변수로 dumbo,20을 담았습니다.
이렇게 new를 통해 새로운 인스턴스를 생성하면 Person에서의 this 는 dumbo가 됩니다.
(dumbo.name 으로 값을 불러낼 수 있다.)
일반함수에서의 this는 함수를 호출한 주체를 가르킵니다!
한번 아래의 코드를 살펴 봅시다.
function Fn() {
this.value = 0;
this.add = function(amount)={
this.value += amount
}
}
const newFn = new Fn();
console.log(newFn.value); //0
newFn.add(5);
console.log(newFn.value);//5
const add2 = newFn.add;
add2(5);
console.log(newFn.value);//5
코드에서 보시면 일반함수에서의 this는 함수를 호출한 주체라는 것아 보입니다.
const add2 = newFn.add;
add2(5);
console.log(newFn.value);//5
add2를 했을때의 함수의 주체는 newFn이 아닙니다.
그렇기에 10이 아닌 5가 나오는 것입니다.
add2(5)에서는 따로 주체가 없기때문에 이럴경우에는 기본 주체인 window를 가르킵니다.
그런데 화살표함수에서는 this의 바인딩이 일반함수와 다릅니다.
화살표 함수에서의 this 는 화살표함수가 생성될 당시의 this 를 가르킵니다.(고정됩니다)
add함수를 누가 호출하는지는 중요하지 않단 말입니다!
function Fn() {
this.value = 0;
this.add(amount)=>{
this.value += amount
}
}
const newFn = new Fn();
console.log(newFn.value); //0
newFn.add(5);
console.log(newFn.value);//5
const add2 = newFn.add;
add2(5);
console.log(newFn.value);//10
'javascript' 카테고리의 다른 글
롤업과 웹팩의 차이점 (rollup vs webpack) (2) | 2021.04.22 |
---|---|
자바스크립트 클로저가 아직도 난해한 개념으로 다가오는 사람들 모여라! (6) | 2021.03.05 |
자바스크립트 프로토타입 개념이 어려운 사람들을 위해 (0) | 2021.03.01 |
자바스크립트 비동기 처리 - callback 과 promise (0) | 2020.11.10 |
실행컨텍스트 - 자바스크립트야 왜 그렇게 동작하니? (0) | 2020.09.25 |