자바스크립트에서 this
키워드를 이해하는 것은 자바스크립트 언어를 마스터하고, 효율적이고 버그가 없는 코드를 작성하는 데 중요하다. 중요성에도 불구하고, 'this'는 초심자들에게 가장 혼란스러운 측면 중 하나일 수 있는데, 이 문서에서는 'this' 주변의 신비를 해체하고 다른 맥락에서의 동작을 탐색한다.
const obj = {
name: 'John',
greet() {
console.log(`안녕하세요, ${this.name}!`);
}
};
obj.greet(); // 출력: 안녕하세요, John!
const newObj = {
name: 'Jane',
greet: obj.greet,
};
newObj.greet(); // 출력: 안녕하세요, Jane!
function Person(name) {
this.name = name;
}
const person = new Person('Alice');
console.log(person.name); // 출력: Alice
call()
메서드는 지정된 this
값을 가지고 함수를 호출하고 개별적으로 아규먼트를 제공할 수 있게 한다.function.call(thisArg, arg1, arg2, ...)
function sayHello(greeting) {
console.log(`${greeting}, ${this.name}!`);
}
const person = { name: '준식' };
sayHello.call(person, '안녕하세요'); // 결과: 안녕하세요, 준식!
call()
을 사용하여 person
객체를 this
값으로 전달하고 '안녕하세요'를 greeting
아규먼트로 사용하여 sayHello
함수를 호출한다.apply()
메서드는 call()
과 비슷하지만 아규먼트를 배열로 받는다.function.apply(thisArg, [argsArray])
function introduceYourself(greeting, age) {
console.log(`${greeting}, I'm ${this.name} and I'm ${age} years old.`);
}
const person = { name: '춘식' };
const args = ['Hello', 30];
introduceYourself.apply(person, args);
// 결과: Hello, I'm 춘식 and I'm 30 years old.
apply()
는 person
객체를 this
값으로 사용하여 introduceYourself
함수에 아규먼트 배열을 전달한다.bind()
메서드는 지정된 this
값을 가지고 초기 아규먼트를 가진 새로운 함수를 반환한다.function.bind(thisArg, arg1, arg2, ...)
function greet() {
console.log(`Hello, ${this.name}!`);
}
const person = { name: '대한' };
const boundGreet = greet.bind(person);
boundGreet(); // 결과: Hello, 대한!
bind()
는 person
객체를 this
값으로 사용하여 새로운 함수 boundGreet
를 만든다. boundGreet()
이 호출되면 person
객체에서 이름을 사용하여 인사말을 출력한다.이러한 메서드는 함수 내에서 this
값을 명시적으로 설정하는 데 유용하며, 특히 상황이 모호하거나 명시적으로 제어해야 할 때 사용된다. 이들은 일반적으로 이벤트 처리, 콜백 함수 및 객체 지향 프로그래밍과 같은 시나리오에서 사용된다.
자바스크립트에서 'this' 개념을 마스터하는 것은 깨끗하고 간결하며 유지보수 가능한 코드를 작성하는 데 중요하다. 다양한 컨텍스트에서 'this'가 어떻게 동작하는지 이해하면 언어의 전체 잠재력을 발휘하고 보다 능숙한 자바스크립트 개발자가 될 수 있다. 이 중요한 개념을 확실히 이해하기 위해 계속 실험하고 연습하기를 권장한다.