JS 23 apply
함수호출
demo27.html
기본 호출
function func() {}
func();
함수를 호출하는 색다른 방법
- JS에서 함수는 일종의 객체
- 객체 - 속성 property (담긴속성이 함수면 method)
function func() {}
func();
func.apply;
func.call;
//함수를 호출하는 역할
//같은 취지, 다른사용법
.apply
function sum(arg1, arg2) {
return arg1 + arg2;
}
sum(1, 2);
sum(4, 2);
//일반적 호출
sum.apply(null, [1, 2]);
// :3
.apply를 사용하는 구체적 이유
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) {
//this ?
//현재는 미정, 호출할때 정해짐
_sum += this[name];
}
return _sum;
}
sum.apply(o1);
// 6
//sum을 apply(호출)할 때 sum이 객체 o1에 담겨있는 값을 계산함
//여기서 this는 o1 (const this = o1)
// = o1.sum 아래예시로 바꾼 코드와 같음
sum.apply(o2);
// 185
.apply를 사용하면?
마치 sum함수가 o1이라는 객체의 속성인것 처럼
실행되게 할 수 있음
plus
아래예시 1
function sum() {
var _sum = 0;
for (name in this) {
_sum += this[name];
}
return _sum;
}
o1 = { val1: 1, val2: 2, val3: 3, sum:sum};
//sum:sum = o1객체에 sum이라는 함수를 속성으로 추가
//그과정에서 this가 sum:sum까지 계산하기때문에 error
o1.sum();
추가한 속성의 타입이 달라 error가 나니까
아래예시2;
function sum() {
var _sum = 0;
for (name in this) {
if (typeof this[name] !== "function") _sum += this[name];
}
return _sum;
}
o1 = { val1: 1, val2: 2, val3: 3, sum: sum };
o1.sum();
조건도 들어가야하고
몹시 복잡해짐