mozilla
검색 결과

    Function.protocol.call()

    현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

    요약

    주어진 this 값과 각 각 제공받은 인자값들을 가지고 함수를 호출

    주의: 문법적인 측면에서 call()함수가  apply()함수와 구별되는 근본적인 차이점은 함수의 파라미터에 있습니다. call() 함수는 인자 리스트(argument list)를  파라미터로 받지만  apply() 함수는 인자를 담은 배열(single array of arguments) 하나를 파라미터로 받습니다. 

    Syntax

    fun.call(thisArg[, arg1[, arg2[, ...]]])

    Parameters

    thisArg
    The value of this provided for the call to fun. Note that this may not be the actual value seen by the method: if the method is a function innon-strict mode  code, null andundefinedwill be replaced with the global object, and primitive values will be boxed.
    arg1, arg2, ...
    객체를 위한 인자 리스트

    Description

    이미 정의된 함수를 호출할 때 다른 this 객체를 할당할 수 있습니다. this 는 현재 객체나 호출 객체를 나타냅니다.

    call 함수를 사용하면,  한 번 작성한 함수를 다른 객체에 상속 시킴으로써 새로운 객체에서 똑같은 함수를 재작성할 필요가 없습니다.

    Examples

    객체의 생성자를 호출하기 위해 call 함수 사용

    Java와 유사하게 어떤 객체의 생성자를 호출하기 위해 call 함수를 사용할 수 있습니다. 다음 샘플에서,  Product 객체의 생성자는  name과 value를 파라미터로 받습니다. Food 와 Toy 함수는 Product 를 호출하면서 this, namevalue를 파라미터로 전달합니다. Product 은 name과 price 속성을 초기화하고, 두 개의 특화된 함수는 category를 정의합니다.

    function Product(name, price) {
      this.name = name;
      this.price = price;
    
      if (price < 0)
        throw RangeError('Cannot create product "' + name + '" with a negative price');
      return this;
    }
    
    function Food(name, price) {
      Product.call(this, name, price);
      this.category = 'food';
    }
    Food.prototype = new Product();
    
    function Toy(name, price) {
      Product.call(this, name, price);
      this.category = 'toy';
    }
    Toy.prototype = new Product();
    
    var cheese = new Food('feta', 5);
    var fun = new Toy('robot', 40);
    

    익명 함수를 호출하기 위해 call 함수 사용

    이번 예제에선 익명 함수를 만들고 배열에 담긴 모든 객체에 익명 함수를 호출하기 위해 call 함수를 사용합니다. 여기서 익명 함수의 주요 목적은 배열에 담긴 객체의 올바른 인덱스를 출력할 수 있는 모든 객체에 print 함수를 추가하는 것입니다. 엄밀히 따지면 this의 값으로 객체를 넘길 필요는 없지만, 설명을 위해 의도적으로 객체를 넘겼습니다.

    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); 
        } 
      }).call(animals[i], i);
    }
    

    See Also

    문서 태그 및 공헌자

    Contributors to this page: Jeado.Ko, ByungChangYoo, teoli
    최종 변경: teoli,