반응형
let red = {
fruits: 'apple'
};
let yellow = {
fruits: 'banana'
};
const say = function() {
console.log(`${this.fruits} is good!`);
};
// 각각의 object가 하나의 say를 쓰고 싶다면?
1. call
say.call(red) // apple is good!;
say.call(yellow) // banana is good!;
이렇게 쿨하게 가져다가 쓸 수 있다.
1-1) 만약 function에 인자가 있다면
let red = {
fruits: 'apple'
};
const say = function(country) {
console.log(`${this.fruits}(from ${country}) is good!`);
};
say.call(red, 'korea'); // apple(from korea) is good!
그냥 쉼표 쓰고 인자를 써주면 된다.
1-2) 그 인자가 여러개라면
let red = {
fruits: 'apple'
};
const say = function(country, num1, num2) {
console.log(`Number ${num1 + num2} ${this.fruits}(from ${country}) is good!`);
};
say.call(red, 'korea', 2, 3); // Number 5 apple(from korea) is good!
그냥 계속 쉼표 쓰고 인자를 써주면 된다.
2. apply
여러개의 인자를 하나의 arr에 묶었을 경우 apply를 씀.
let red = {
fruits: 'apple'
};
const say = function(country, num1, num2) {
console.log(`Number ${num1 + num2} ${this.fruits}(from ${country}) is good!`);
};
let arr = ['korea', 2, 3];
say.call(red, 'korea', 2, 3); // Number 5 apple(from korea) is good!
say.apply(red, arr) // Number 5 apple(from korea) is good!
3. bind
약간 방식이 다른데 결국 똑같음.
let red = {
fruits: 'apple'
};
const say = function(country, num1, num2) {
console.log(`Number ${num1 + num2} ${this.fruits}(from ${country}) is good!`);
};
let bound = say.bind(red); // 함수가 만들어짐
bound('korea', 2, 3); // Number 5 apple(from korea) is good!
결론
call, apply, bind 전부 어떤 하나의 method를 갖다 쓰고싶을 때 사용.
(동일한 method를 각 object에 다 넣어버리면 자원낭비니까, 공통으로 쓰이는건 따로 빼서 쓰면 효율적)
인자가 여러개일때 call은 일일히 써주고, apply는 array에 넣어서 한번에 써줄 수 있음.
bind는 먼저 함수를 하나 리턴 하여 거기에 다시 인자를 써주면 되는 형식.
'Javascript' 카테고리의 다른 글
꿀팁이나 기억해둘 것 (0) | 2021.06.08 |
---|---|
html에 json파일 넣어서 데이터 불러오기 (0) | 2021.04.16 |
🌟추천🌟this는 도대체 무엇인가 (0) | 2021.02.20 |
var/let/const 차이점, undefined/null 차이점, arrow function이란, 실행 컨텍스트란 (0) | 2021.01.18 |
🌟추천🌟😈함수 안과 밖에서 원시값은 어떻게 달라질까? (0) | 2021.01.18 |