this란?
this 사용법
1. 함수 안에 this 는 window를 뜻한다.
function 함수(){
console.log(this)
}
함수(); // window
2. object 자료형 내에 함수안에 this는 부모요소를 뜻한다.
var 오브젝트 = {
data : 'Kim',
함수 : function(){ console.log(this) }
}
오브젝트.함수(); // data : 'kim' , 함수
3. 3. constructor 안에서 쓰면 constructor로 새로생성되는 오브젝트를 뜻한다.
function 기계(){
this.이름 = 'Kim' // 새로 생성되는 오브젝트 이름(key) 값에 값을 넣어주는 기능
}
var 오브젝트 = new 기계();

4. eventlistener 안에서 쓰면 this는 e.currentTarget라는 의미
document.getElementById('버튼').addEventListener('click', function(e){
console.log(this) // == e.currentTarget
});
apply , call 함수
해당 코드를 보면 call은 보통 함수와 똑같이 인자를 넣고, apply는 인자를 하나로 묶어 배열로 만들어 넣는 것을 알 수 있다.
var example = function (a, b, c) {
return a + b + c;
};
example(1, 2, 3);
example.call(null, 1, 2, 3); // 6
example.apply(null, [1, 2, 3]); // 6
say함수의 this를 변경하고 싶다면, 당연히 this를 대체할 객체가 있어야 한다. 코드를 조금 수정해서 아래와 같이 만들었다.
const obj = { name : 'Tom' };
const say = function(city){
console.log(`Hello, my name is ${this.name}, I live in ${city}`);
}
say("seoul"); // Hello, my name is , I live in seoul
say.call(obj, "seoul"); // Hello, my name is Tom, I live in seoul
say.apply(obj, ["seoul"]); // Hello, my name is Tom, I live in seoul
call과 apply는 함수를 호출하는 함수이다. 그러나 그냥 실행하는 것이 아니라 첫 번째 인자에 this로 setting하고 싶은 객체를 넘겨주어 this를 바꾸고나서 실행한다.