자바 스크립트 .call()
와 .apply()
메소드를 사용하면 함수 의 컨텍스트 를 설정할 수 있습니다 .
var myfunc = function(){
alert(this.name);
};
var obj_a = {
name: "FOO"
};
var obj_b = {
name: "BAR!!"
};
이제 전화를 걸 수 있습니다 :
myfunc.call(obj_a);
어떤 경고 FOO
합니다. 다른 방법으로지나 obj_b
가면 경고 BAR!!
합니다. 의 차이 .call()
와는 .apply()
즉 .call()
당신이 함수에 인수를 전달하는 경우 쉼표로 구분 된 목록 소요 .apply()
배열을 필요로한다.
myfunc.call(obj_a, 1, 2, 3);
myfunc.apply(obj_a, [1, 2, 3]);
따라서 메소드 hook
를 사용하여 함수 를 쉽게 작성할 수 있습니다 apply()
. 예를 들어, jQuerys .css()
메소드에 기능을 추가하려고합니다 . 원래 함수 참조를 저장하고, 사용자 정의 코드로 함수를 덮어 쓰고 저장된 함수를 호출 할 수 있습니다.
var _css = $.fn.css;
$.fn.css = function(){
alert('hooked!');
_css.apply(this, arguments);
};
매직 arguments
객체는 객체와 같은 배열 이므로 그냥 전달할 수 있습니다 apply()
. 그렇게하면 모든 매개 변수가 원래 함수로 전달됩니다.