객체는 속성을 가지고 함수의 속성을 가진 객체는 메소드를 가진다.
fuction.call, fucntion.apply등의 함수 메소드를 가진다.
function sum(arg1, arg2){
return arg1+arg2;
}
alert(sum.apply(null, [1,2]))
sum(1,2)와 alert(sum.apply(null, [1,2]))는 값이 같다.
apply라는 메소드를 사용하여 sum을 호출한 값.
null은 없는값이기 때문에 원래는 이 메소드를 여기서 사용하는것은 옳지 않다. 마티즈에 고급유를 넣는느낌.
그냥 sum(1,2)로 원하는값을 구하는게 더 효율적이다.
o1 = {val1:1, val2:2, val3:3}
o2 = {v1:10, v2:50, v3:100, v4:25}
function sum(){
var _sum = 0;
for(name in this){
_sum += this[name];
}
return _sum;
}
alert(sum.apply(o1)) // 6
alert(sum.apply(o2)) // 185
o1, o2 라는 객체를 인자로 넣었다 .apply를 통해서
sum.apply(o1)의 값은 o1에 들어있는 값들의 합이 된다.
.apply(o1)으로 인해 function sum()의 내부함수로 this= o1과 같아진다.
sum.apply(o1)은 o1.sum()과 같다.
그런데 정확하게 .apply()와 .sum()의 차이점을 이해하기 어렵다 아직은
왜 .apply를 이 상황에서 사용하면 더 멋진 코드가 되는지 알아봐야겠다.