자스는 객체 생성을 class 대신 function으로 생성하고 프로토타입체인으로 상속했다.
물론 옛날 문법이야기고 지금 이딴식으로 코드짜면 대가리를 때려도 무죄임
여튼 예전엔 객체 생성을
function Human() {
this.name = '침팬지'
}
이딴식으로 구현했는데 대체 무슨 생각으로 만들었는지 모르겠음.
요컨데 function을 사용하면 자체적인 this 스코프를 가지게 된다.
여튼 이로인한 문제가 생겼는데 객체의 메서드 내에서 새로운 함수를 사용할때다.
Human.prototype.say = function() {
const print = function() {
console.log(this.name)
}
print()
}
이와같은 시발스러운 코드가 가능하다는 것이다.
위에서 언급했다시피 각 function 마다 자체 this 스코프가 존재하고
이 문제가 꼬여서 print함수는 콘솔에 undefined가 찍히게 된다. 침팬지가 아니라.
이런 문제를 해결하기 위해서 옛날엔
Human.prototype.say = function() {
const self = this
const print = function() {
console.log(self.name)
}
print()
}
이렇게 사용하곤했는데
이런 개같은 경우를 해결하기 위해 등장한게 화살표 함수임
Human.prototype.say = function() {
const print = () => {
console.log(this.name)
}
print()
}
화살표함수는 자체적인 this 스코프를 가지지 않도록 설계되었다. 이 화살표 함수가 일반적으로 말하는 함수와 더 가까울 거임
고로 this 문제로 골머리를 쌓고있는 자린이들이 있다면
화살표 함수를 애용해보도록하자
- dc official App
나 자스 처음할때 겪었던 문제 진짜 그대로 보는것 같네 정리 ㄳ
정리는 고마운데 그냥 객체지향식 프로그래밍을 안 하는게 더 낫겠어... - dc App