this 키워드란?
this
키워드는 함수가 호출될 때, 해당 함수가 속한 객체를 참조합니다. this
의 값은 함수가 어떻게 호출되었는지에 따라 달라집니다.
전역 문맥에서의 this
전역 문맥에서는 this
는 전역 객체를 참조합니다. 브라우저 환경에서는 전역 객체가 window
입니다.
예제
console.log(this); // window 객체
함수 문맥에서의 this
일반 함수에서는 this
가 전역 객체를 참조합니다. 엄격 모드에서는 undefined
를 참조합니다.
예제
function showThis() {
console.log(this);
}
showThis(); // window 객체 (엄격 모드에서는 undefined)
메서드 문맥에서의 this
메서드 내부에서는 this
가 해당 메서드를 호출한 객체를 참조합니다.
예제
let person = {
name: 'Alice',
greet: function() {
console.log(this.name);
}
};
person.greet(); // 'Alice'
생성자 함수에서의 this
생성자 함수 내부에서는 this
가 새로 생성된 객체를 참조합니다.
예제
function Person(name) {
this.name = name;
}
let person1 = new Person('Bob');
console.log(person1.name); // 'Bob'
클래스 문맥에서의 this
클래스 내부의 메서드에서는 this
가 해당 클래스로 생성된 인스턴스를 참조합니다.
예제
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log('Hello, ' + this.name);
}
}
let person1 = new Person('Charlie');
person1.greet(); // 'Hello, Charlie'
화살표 함수에서의 this
화살표 함수는 자신만의 this
바인딩을 가지지 않으며, 자신이 정의된 문맥의 this
를 상속받습니다.
예제
let person = {
name: 'Alice',
greet: function() {
setTimeout(() => {
console.log('Hello, ' + this.name);
}, 1000);
}
};
person.greet(); // 'Hello, Alice'
call, apply, bind 메서드
call
call
메서드는 함수를 호출할 때 this
값을 명시적으로 지정할 수 있습니다.
예제
function greet() {
console.log('Hello, ' + this.name);
}
let person = { name: 'David' };
greet.call(person); // 'Hello, David'
apply
apply
메서드는 call
메서드와 유사하지만, 인수를 배열로 전달합니다.
예제
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
let person = { name: 'Eve' };
greet.apply(person, ['Hello', '!']); // 'Hello, Eve!'
bind
bind
메서드는 함수의 this
값을 영구적으로 바인딩하여 새로운 함수를 반환합니다.
예제
function greet() {
console.log('Hello, ' + this.name);
}
let person = { name: 'Frank' };
let boundGreet = greet.bind(person);
boundGreet(); // 'Hello, Frank'
this의 다양한 사용 사례
객체의 메서드에서의 this
객체의 메서드에서 this
는 해당 메서드를 호출한 객체를 참조합니다.
let car = {
brand: 'Tesla',
model: 'Model 3',
details: function() {
console.log(this.brand + ' ' + this.model);
}
};
car.details(); // 'Tesla Model 3'
생성자 함수에서의 this
생성자 함수 내부에서는 this
가 새로 생성된 객체를 참조합니다.
function Car(brand, model) {
this.brand = brand;
this.model = model;
}
let myCar = new Car('Ford', 'Mustang');
console.log(myCar.brand); // 'Ford'
console.log(myCar.model); // 'Mustang'
화살표 함수에서의 this
화살표 함수는 자신이 정의된 문맥의 this
를 상속받습니다.
let user = {
name: 'Grace',
showName: function() {
setTimeout(() => {
console.log(this.name);
}, 1000);
}
};
user.showName(); // 'Grace'
결론
this
키워드는 JavaScript에서 함수의 호출 문맥을 참조하는 중요한 역할을 합니다. 이번 글에서는 this
의 기본 개념, 전역 문맥, 함수 문맥, 메서드 문맥, 생성자 함수, 클래스 문맥, 화살표 함수, call
, apply
, bind
메서드에서의 this
사용법에 대해 배웠습니다. 다음 글에서는 고차 함수에 대해 알아보겠습니다.
다음 글에서 만나요!
'JavaScript 문법 시리즈' 카테고리의 다른 글
[JavaScript 문법] 17일차: 함수형 프로그래밍 (0) | 2024.08.17 |
---|---|
[JavaScript 문법] 16일차: 고차 함수 (0) | 2024.08.16 |
[JavaScript 문법] 14일차: 모듈 (1) | 2024.08.14 |
[JavaScript 문법] 13일차: 맵과 셋 (0) | 2024.08.13 |
[JavaScript 문법] 12일차: ES6 클래스 (0) | 2024.08.12 |