함수안에서 this를 사용하면서 Window 객체 말고 다른 객체를 참조하게 하는 방법: call, apply, bind
바로 실행되게, 인수를 직접 넣어서 사용
// Call() with arguments
const fullName = function (city, country) {
console.log(`${this.firstName}, ${this.lastName}, ${city}, ${country}`);
}
const person1 = {
firstName: "John",
lastName: "Doe"
}
fullName.call(person1, "Oslo", "Norway");
바로 실행되게, 인수 부분은 배열로 넣어주기
// Apply() with arguments
const fullName = function (city, country) {
console.log(`${this.firstName}, ${this.lastName}, ${city}, ${country}`);
}
const person1 = {
firstName: "John",
lastName: "Doe"
}
fullName.apply(person1, ["Oslo", "Norway"]);
함수를 직접 실행하지 않고 반환
따라서 함수를 직접 실행해주어야 한다.
// bind()
function func(language) {
if (language === "kor") {
console.log(`language: ${this.korGreeting}`);
} else {
console.log(`language: ${this.engGreeting}`);
}
}
const greeting = {
korGreeting: "안녕 ",
engGreeting: "Hello ",
};
const boundFunc = func.bind(greeting);
boundFunc('kor'); // 직접 함수 실행