μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ κ°μ²΄λ‘ λ€λ€μ§λ€. call()
, apply()
, bind()
λ λͺ¨λ ν¨μ μ€νμ μ μ΄νκΈ° μν΄ μ¬μ©λλ λ©μλμ΄λ€. call()
κ³Ό apply()
λ ES5μ λμ
λ λ¬Έλ²μ΄κ³ bind()
λ κ·Έν ES5μ λμ
λμλ€.
ν¨μλ₯Ό μ¦μ μ€ννκ³ μ ν λλ call()
κ³Ό apply()
λ₯Ό μ¬μ©νκ³ , bind()
λ λμ€μ boundλ ν¨μλ₯Ό λ¦¬ν΄ λ°μ μ¬μ©νλ―λ‘ μ΄νμ μ€νλ ν¨μλ₯Ό μκ°νλ©° μ¨μΌ νλ€.
const user = {
name: 'Hannah'
}
const profile = function (location, language) {
return `${this.name} is a ${language} programmer, who lives in ${location}`;
}
console.log(profile.call(user, 'Seoul', 'JavaScript'));
// Hannah is a JavaScript programmer, who lives in Seoul
const arguments = ['Seoul', 'JavaScript'];
console.log(profile.apply(user, arguments))
// Hannah is a JavaScript programmer, who lives in Seoul
call()
κ³Ό apply()
λ κ°κ° 첫 λ²μ§Έ μΈμλ‘ λ°λ κ°μ this
컨ν
μ€νΈλ‘ μ€μ νλ€. μ°¨μ΄μ μ apply()
κ° λ λ²μ§Έλ‘ λ°λ νλΌλ―Έν°κ° λ°°μ΄μ΄λΌλ μ μ΄λ€. ES6μ μ κ°μ°μ°μλ₯Ό μ¬μ©νλ©΄ μ¬μ€ μλμ²λΌλ μ¬μ©ν μ μλ€.
console.log(profile.call(user, ...arguments));
// Hannah is a JavaScript programmer, who lives in Seoul
bind()
λ μ¦μ μ€νλμ§ μλλ€. μμ μ€λͺ
ν κ²μ²λΌ λ°μ΄λλ ν¨μκ° λ¦¬ν΄λμ΄ λμ€μ νΈμΆλ λμ λ°μμ€κ² λλ€. bind()
λ 첫 λ²μ§Έ νλΌλ―Έν°λ‘ λ°μ΄λλ ν¨μκ° νΈμΆλλ νκ² ν¨μ λ΄ this
컨ν
μ€νΈλ₯Ό μ€μ ν΄μ£ΌκΈ° μν΄ μ¬μ©λλ€.
const bound = profile.bind(user);
console.log(bound(...arguments)); // Hannah is a JavaScript programmer, who lives in Seoul
μ μ½λμμ 보λ κ²μ²λΌ λ¨Όμ 컨ν μ€νΈλ₯Ό μ€μ ν΄μ€ ν¨μλ₯Ό λ§λ€κ³ , λμ€μ νμν λ μλ‘μ΄ νλΌλ―Έν°μ ν¨κ» νΈμΆν΄μ€λ€.
νμ΄ν ν¨μμλ μ½κ°μ μ°¨μ΄κ° μμΌλ μμλλ©΄ μ’λ€. bind(this)
λ₯Ό μ¬μ©ν λλ ν¨μμ νμ λ λ²μ μ λ§λ λ€λ©΄, νμ΄ν ν¨μλ μ무κ²λ λ°μΈλ©νμ§ μκ³ λ¨μ§ this
λ₯Ό κ°μ§ μμ λΏμ΄λ€. κ·Έλμ μΈλΆμμ this
λ₯Ό μ°Ύλλ€.
Reference
practical application of apply, call, and bind
arrow function