자바스크립트는 함수를 호출하는 특별한 방법을 제공한다. 함수는 일종의 객체이다. 따라서 객체 Function이 가지고 있는 메소드들을 상속하고 있다. 지금 이야기하려는 메소드는 Function.lapply이다.
function.apply();//내장된 함수인 경우 native code라고 나온다.
function sum(arg1, arg2) {
return arg1+arg2;
}
sum.apply(null, [1,2]);//3
sum.apply(null, [4,2]);//6
아래의 코드에서 함수 sum의 매개변수는 명시되어있지 않지만, 객체를 인자로 전달하였을 때, this를 이용하여 객체의 속성값들의 합을 구할 수 있다. apply 메소드를 사용하면, 함수를 마치 인자로 전달된 객체의 메소드인 것처럼 사용할 수 있다.
o1 = {val1 : 1, val2 : 2, val3 : 3}
o2 = {v1 : 10, v2 : 50, v3 : 100, v4:25}
function sum() {
var _sum = 0;
//var this = o1;
for(name in this) {//o1이 this로 전달된다.
_sum += this[name];
}
return _sum;
}
alert(sum.apply(o1));//o1.sum()이 된다(o1객체의 메소드가 된다!)
alert(sum.apply(o2));//o2.sum()이 된다(o2객체의 메소드가 된다!)