JS Bind/Call/Apply

murkgom·2020년 12월 24일
0

Bind

Spec

func.bind(thisArg[, arg1[, arg2[, ...]]])

this 지정하기

let dog = {
	voice: '멍멍!', 
    bark: function() {
    	console.log(this.voice);
    }
};

let cat = {
	voice: '야옹~', 
    meow: function() {
    	console.log(this.voice);
    }
}

dog.bark();		//'멍멍!'
let weirdBark = dog.bark.bind(cat);		//this에 cat을 적용한 새로운 함수를 생성
weirdBark();		//'야옹~'

응용(기본값 넣기)

function sum(num1, num2) {
    const result = num1 + num2;
    return console.log(`${num1} + ${num2} = ${result}`);
}

sum(1, 2);		//1 + 2 = 3
const addHundred = sum.bind(null, 100);		
//null은 this, 그 뒤로는 그 함수의 param에 적용됨(num1 = 100으로 선언한 셈)
addHundred(1);		//100 + 1 = 101

Call

Spec

func.call([thisArg[, arg1, arg2, ...argN]])
  • bind 후에 바로 호출

Use

sum.call(null, 100);		//100 + undefind = NaN
sum.call(null, 100, 50);		//100 + 50 = 150

Apply

Spec

func.apply(thisArg, [ argsArray])
  • call과 동일하지만, args를 array로 받음

Use

sum.call(null, [100, 50]);		//100 + 50 = 150

0개의 댓글