๐ ๋ชฉ์ฐจ
- Introduction
- What is call?
- What is apply?
- What is bind?
- Usage
- Conclusion
- Reference
๐ Introduction
์๋
ํ์ธ์. ์ด๋ฒ ํฌ์คํ
์์๋ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ call
, apply
, bind
์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ What is call?
๋จผ์ call์ ์ ์ํ๊ธฐ ์ ์ ํด๋น ์์ ๋ฅผ ๋ด์ฃผ์ธ์.
const example = (a, b, c) => {
console.log(a + b + c);
};
example(1, 2, 3); // 6
example.call(null, 1, 2, 3); // 6
example์ ์คํ์ํจ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก example.call๋ ๋๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ๋๋ค. ๋์น๋ฅผ ์ฑ์ ๋ถ๋ ์๊ฒ ์ง๋ง call์ ์ฒซ๋ฒ ์งธ ์ธ์ ๋ค์๋ example์ ๋ค์ด๊ฐ๋ ์ธ์๋ฅผ ๋์ดํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด null์ ๋ฌด์์ผ๊น์? ์ ๋ต์ ๋ฐ๋ก this๋ฅผ ๋์ฒดํ๋ ๊ฒ์ ๋๋ค.
const obj1 = {
name: 'eddie',
greeting: function () {
console.log(`Hi, ${this.name}`);
},
};
const obj2 = {
name: 'claire',
};
obj1.greeting(); // Hi, eddie
obj1.greeting.call(obj2); // Hi, claire
์ด๋ ๊ฒ ์ฒซ๋ฒ์งธ ์ธ์๋ก this๋ฅผ ๋์ฒด ์์ผ์ค ์ ์์ต๋๋ค.
๐ What is apply?
apply
๋ call
๊ณผ ๋น์ทํฉ๋๋ค. ๋ค์ ์์ ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
const example = (a, b, c) => {
console.log(a + b + c);
};
example.apply(null, [1, 2, 3]); // 6
call๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฒซ๋ฒ์งธ ์ธ์๋ this๋ฅผ ๋์ฒดํ๋๊ฒ์ด๊ณ call๊ณผ ๋ค๋ฅธ์ ์ ๋๋ฒ์งธ ์ธ์์ array๋ก example์ ๋ค์ด๊ฐ๋ ์ธ์๋ฅผ ์ง์ ํฉ๋๋ค.
const obj1 = {
name: 'eddie',
greeting: function () {
console.log(`Hi, ${this.name}`);
},
};
const obj2 = {
name: 'claire',
};
obj1.greeting.apply(obj2); // Hi, claire
๐ What is bind?
๊ทธ๋ ๋ค๋ฉด bind๋ ๋ญ๊น์? call๊ณผ apply ์ฒ๋ผ this๋ฅผ ๋์ฒดํ๋ค๋ ์ ์์ ๊ฐ์ง๋ง ์คํ์ ์์ผ์ฃผ์ง๋ ์์ต๋๋ค. ๋ค์ ์์ ๋ฅผ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
const obj1 = {
name: 'eddie',
greeting: function () {
console.log(`Hi, ${this.name}`);
},
};
const obj2 = {
name: 'claire',
};
const greetingClaire = obj1.greeting.bind(obj2);
greetingClaire(); // Hi, claire
์ด ์ฒ๋ผ call๊ณผ apply๋ ๋ฐ๋ก ์คํ์ ์์ผ์ฃผ๋ ๋ฐ๋ฉด bind๋ this๋ง ๋ฐ๊ฟ์ค ํํ๋ก return์ ์์ผ์ค๋๋ค.
๐ Usage
call, apply, bind๋ ์ด๋ฐ์์ผ๋ก๋ ์์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
function example2() {
console.log(arguments.join()); // error;
}
์์ ์ฝ๋๋ arguments๊ฐ ์ ์ฌ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ์ค์ ์ ์ผ๋ก๋ ๋ฐฐ์ด์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง call์ ์ฌ์ฉํ๋ค๋ฉด ๋ฌ๋ผ์ง์ฃ .
function example2() {
console.log(Array.prototype.join.call(arguments));
}
example2('eddie', 2, true); // eddie,2,true
๐ Conclusion
์ด๋ฒ ํฌ์คํ ์์๋ ์์ฃผ ์ฐ์ด์ง๋ ์์ง๋ง context๋ฅผ ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ call, apply, bind์ ๋ํด์ ์์๋ณด์์ต๋๋ค. this๋ผ๋ ๊ฒ์ ํญ์ ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ ์๊ณ ์์ผ๋ฉด ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์์ต๋๋ค.
๐Reference
'Javascript Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Proxy (0) | 2020.10.26 |
---|---|
Reduce์ ๋ํ ๊ณ ์ฐฐ (2) | 2020.07.24 |