Jun 개발노트

JS Function.prototype.call()

February 13, 2020

Function.prototype.call()

  • call() 메소드는 주어진 this 값 및 각각 전달될 인수와 함께 함수를 호출
    apply() 거의 동일하지마느 중요안 차이는 call 인수 목록 / apply 인수 배열 하나
  • 객체 생성자 연결에 call 사용
  • 자바와 비슷하게 객체 생성자 연결에 call 사용

    // 전체 객체 생성자 함수 만듬
    function Product(name, price){
      this.name  = name;
      this.price = price;
    
      if(price < 0){
        throw RangeError(this.name + 'is a Negative price')
      }
    }
    // call을 통해 Food안에 Product를 담는다.
    function Food(name, price){
      Product.call(this, name, price);
      this.category = 'food'
    }
  • 익명 함수 호출에 call 사용

    var animals = [
    { species: 'Lion', name: 'King' },
    { species: 'Whale', name: 'Fail' }];
    
    for (var i = 0; i < animals.length; i++) {
    (function(i) {
      this.print = function() {
        console.log('#' + i + ' ' + this.species
                    + ': ' + this.name);
      }
      this.print();
    }).call(animals[i], i);
    }
  • 함수 호출 및 ‘this’를 위한 문맥 지정에 call 사용

    function greet() {
    var reply = [this.animal, 'typically sleep between', this.sleepDuration].join(' ');
    console.log(reply);
    }
    
    var obj = {
      animal: 'cats', sleepDuration: '12 and 16 hours'
    };
    
    greet.call(obj); 
    // cats typically sleep between 12 and 16 hours
  • 첫번째 인수 지정 없이 함수 호출에 call 사용

    • this가 전역 객체로 바인딩

      var sData = 'Wisen';            
      function display(){
      console.log('sData value is %s ', this.sData);
      }
      
      display.call();  // sData value is Wisen

Written by Junho You 배운것을 기록하자