Dev-dotoli TIL

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();

조건도 들어가야하고

몹시 복잡해짐