JavaScript에서의 this는 C언어에서의 포인터 느낌이라고 할 수 있겠다.
물론 syntax적으로 같다는 의미는 아니고 이해하기 까다로운 맥락에서 같다는 의미이다.
대부분 개발을 처음 배우는 사람들이 C언어의 포인터에서 벽을 느끼고 어려워 하니 JS에서는 this가 그 역할을 하지 않나 생각해본다.
아니면 다른 언어를 배우다 JS를 배워서 this가 더 헷갈리는 것일 수 도 있다.
function foo () {
console.log(this);
}
foo();
var age = 100;
var ken = {
age: 35,
foo: function () {
console.log(this.age); // 35
}
}
ken.foo();
- apply()
작성법 : function.apply(thisArg, [argsArray])
this가 가리킬 인자를 첫번째 인자로 받고, 두번째 인자로는 배열을 받음- call()
작성법 : function.call(thisArg[, arg1[, arg2[, ...]]])
this가 가리킬 인자를 첫번째 인자로 받고, 두번째 인자부터는 배열이 아닌 각 인자로 받음- bind()
작성법 : function.bind(thisArg[, arg1[, arg2[, ...]]])
call과 인자 작성법은 동일하나 apply, call과 달리 바로 메소드가 실행되지 않음. this가 가리킬 인자를 바인딩하는 역할만 함.
func.bind(obj, 32, 23);
func.call(obj, 32, 23); // 바로 실행
func.apply(obj, [32, 23]); // 바로 실행
function Foo () {
console.log(this.age); // undefined
this.age = 100; // 빈 객체에 속성 추가
console.log(this.age); // 100
}
new Foo();
function fun() {
this.name = "하이";
return {
name: "바이",
speak: function () {
console.log(this.name);
},
};
}
function arrFun() {
this.name = "하이";
return {
name: "바이",
speak: () => {
console.log(this.name);
},
};
}
const fun1 = new fun();
fun1.speak(); // 바이
const fun2 = new arrFun();
fun2.speak(); // 하이