September 6, 2021
객체는 사용자(user), 주문(order) 등과 같이 실제 존재하는 개체(entity)를 표현하고자 할 때 생성됩니다.
let user = {
name: "John",
age: 30
};
사용자는 현실에서 장바구니에서 물건 선택하기, 로그인하기, 로그아웃하기 등의 행동을 합니다. 이와 마찬가지로 사용자를 나타내는 객체 user도 특정한 행동을 할 수 있습니다.
자바스크립트에선 객체의 프로퍼티에 함수를 할당해 객체에게 행동할 수 있는 능력을 부여해줍니다.
메서드 내부에서 this
키워드를 사용하면 객체에 접근할 수 있습니다.
이때 '점 앞’의 this
는 객체를 나타냅니다. 정확히는 메서드를 호출할 때 사용된 객체를 나타내죠.
예시:
let user = {
name: "John",
age: 30,
sayHi() {
*// 'this'는 '현재 객체'를 나타냅니다.
alert(this.name);*}
};
user.sayHi(); // John
자바스크립트의 this
는 다른 프로그래밍 언어의 this
와 동작 방식이 다릅니다. 자바스크립트에선 모든 함수에 this
를 사용할 수 있습니다.
아래와 같이 코드를 작성해도 문법 에러가 발생하지 않습니다.
function sayHi() {
alert( *this*.name );
}
this
값은 런타임에 결정됩니다. 컨텍스트에 따라 달라지죠.
동일한 함수라도 다른 객체에서 호출했다면 'this’가 참조하는 값이 달라집니다.
let user = { name: "John" };
let admin = { name: "Admin" };
function sayHi() {
alert( this.name );
}
*// 별개의 객체에서 동일한 함수를 사용함
user.f = sayHi;
admin.f = sayHi;*// 'this'는 '점(.) 앞의' 객체를 참조하기 때문에
// this 값이 달라짐
user.f(); // John (this == user)
admin.f(); // Admin (this == admin)
admin['f'](); // Admin (점과 대괄호는 동일하게 동작함)