2018. 3. 15. 12:23 JavaScript/개인 스터디
[JavaScript] apply call bind 함수 메서드
명시적인(뜻이 분명한,확실하게) 함수 콘텍스트를 지정할수 있는 메소드
Function.prototype.apply
apply(thisArg,[argsArray]);
Function.prototype.call
call(thisArg,[, arg1[,arg2[,....]]])
Function.prototype.bind
bind(thisArg,[,arg1[,arg2[,...]]]);
1. apply
두개의 매개 변수를 가진다.
( (1) Function(), (2) [......])
(1) 해당과 같이 펑션을 가지게 된다. 함수 콘텍스트로 사용할 펑션 객체
(2) [ ] 형태의 Array 를 인자로 받는다.
2. call
두개의 매개변수를 가진다. (apply 와 마찬가지로)
( (1) Function(), (2) ......)
(1) 해당과 같이 펑션을 가지게 된다. 함수 콘텍스트로 사용할 펑션 객체 (apply 와 같음)
(2) 배열의 형태가 아닌 인자를 그대로 직접 받는다.
function foo(){};
apply (foo,[1,1,1,1]);
call ( foo,1,1,1,1);
실제 사용 테스트 코드
function moveFunction(){ var result = 0; for(var i=0;i<arguments.length;i++){ result+=arguments[i];} this.result = result; } var test1 = {}; var test2 = {}; moveFunction.apply(test1,[3,3,3,3]); moveFunction.call(test2,1,1,1,1); console.log("test1 result value : " ,test1.result); console.log("test2 result value : " ,test2.result);
결과
test1 result value : 12
test2 result value : 4
두 메서드는 인자의 차이만 있을뿐 거의 같은 방식으로 동작하게 된다.
apply 냐 call 이냐의 선택은 인자를 어떻게 사용하여야 하는지에 따라 다를것 같다.
배열 형식으로 사용할거면 apply 인자를 한두개씩 직접 전달해야되는 경우 call
을 선택하여서 사용하면 될것 같다.
결과를 보면 알겠지만 함수의 기능을 가져다 쓰면서 result값을
this.result를 통해서 작성하게 되어있다.
test1과 test2의 각각 컨텍스트를 가질수있게 해주는 메서드로 보면된다.
3. bind
sddfsf
'JavaScript > 개인 스터디' 카테고리의 다른 글
[JavaScript] 기본 내용 정리 (0) | 2018.03.19 |
---|---|
[JavaScript] 함수형 프로그래밍 for-each (0) | 2018.03.19 |
[JavaScript] 함수의 param(파라미터) 과 args(인자) (0) | 2018.03.08 |
[JavaScript] 함수 유효범위 - 호이스팅(hoisting) (0) | 2018.03.06 |
[JavaScript] 함수 유효범위 (0) | 2018.02.27 |