call , apply , bind
첫번째
==========================
call 는
var obj = { num : 2 } ;
var addToThis = function (a){
return this.num + a;
};
// 여기서 코드를 보면 이제 함수에서 this.num 을 찾는데
사실 찾을수가 없다.
그래서 저기 obj 객체에 num 을 찾아 올수도 없다.
접근이 불가하니까...
근데 방법이 있다.
call 을 쓰면된다.
var obj = { num : 2 } ;
var addToThis = function (a){
return this.num + a;
};
console.log(addToThis.call(obj , 3)); // 5
// functioname.call(obj , functionargumentes)
// call을 써줌으로 obj객체에 접근할수 있는것이다.
즉, 함수호출할떄 call붙여서 인자로 넘겨줄때 obj를 넘겨주면 된다.
물런 넘겨줄때 함수의 파라미터가될 인자도 같이 넘겨줄수있다.
예를들어
var obj = { num : 2 } ;
var addToThis = function (a, b, c){
return this.num + a+b+c;
};
console.log(addToThis.call(obj , 1,2,3));
이렇게 넘겨줄수도 있다.
apply 가 있는데
apply 를 적용시켜볼수있다.
apply 로 배열을 넘겨줄수도 있다.
var obj = { num : 2 } ;
var addToThis = function (a, b, c){
return this.num + a+b+c;
};
var arr = [1,2,3];
console.log(addToThis.apply(obj , arr)); // 8
뭐
이렇게도 할수있다.
var obj = { num : 2 } ;
var obj2 = { num : 5 } ;
var addToThis = function (a, b, c){
return this.num + a+b+c;
};
var arr = [1,2,3];
console.log(addToThis.apply(obj , arr)); // 8
console.log(addToThis.apply(obj2 , arr)); // 11
여기서
bind 를 써보자면,
var obj = { num : 2 } ;
var addToThis = function (a, b, c){
return this.num + a+b+c;
};
var arr = [1,2,3];
var bound = addToThis.bind(obj); // 여기서 bind해주고 객체obj 넘겨주고
console.log(bound(1,2,3)); // 8 // 여기서 인자 넘겨주고
이렇게 따로 하면 된다.
=====================================
총 정리 하자면,,
var obj = { num : 2 } ;
var functionname = function (a, b, c){
return this.num + a+b+c;
};
functionname.call(obj,a,b,c); // call
functionname.apply(obj[a,b,c]); // apply // 배열을 넘겨준거임
var bound = functionname.bind(obj); // bind //여기서는 객체만 넘겨주고(아직 함수호출은 안됬다)
bound(a,b,c); // 그리고 여기서 호출하면서 인자넘겨주기! 이게 bind 방식임