call() 메소드는 주어진 this 값 및 각자에게 제공된 인수를 갖는 함수를 호출합니다.

주의: 이 함수 구문은 apply()와 거의 동일하지만, 근본 차이는 call()인수 목록, 반면에 apply()인수 배열 하나를 받는다는 점입니다.

구문

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

매개변수

thisArg
fun 호출에 제공되는 this값. this는 메소드에 의해 보이는 실제값이 아닐 수 있음을 주의하세요: 메소드가 비엄격 모드 코드 내 함수인 경우, nullundefined는 전역 객체로 대체되고 원시값을 객체로 변환됩니다.
arg1, arg2, ...
객체를 위한 인수.

설명

서로 다른 this 객체가 기존 함수를 호출할 때 할당될 수 있습니다. this는 현재 객체(호출하는 객체)를 참조합니다. call로, 메소드를 일단 작성한 뒤 다른 객체에 상속할 수 있습니다, 새로운 객체를 위한 메소드를 재작성할 필요 없이.

객체의 생성자 연결에 call 사용

객체의 생성자 연결(chain)에 call을 사용할 수 있습니다, Java와 비슷하게. 다음 예에서, Product 객체의 생성자는 nameprice 두 매개변수로 정의됩니다. 다른 두 함수 FoodToythisnameprice를 전달하는 Product를 호출합니다. Product는 nameprice 속성을 초기화하고, 전문화된 두 함수(Food 및 Toy)는 category를 정의합니다.

function Product(name, price) {
  this.name = name;
  this.price = price;

  if (price < 0) {
    throw RangeError('Cannot create product ' +
                      this.name + ' with a negative price');
  }
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}

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

함수 호출 및 'this'를 위한 문맥 지정에 call 사용

아래 예에서, greet을 호출하면 this 값은 객체 i에 바인딩됩니다.

function greet() {
  var reply = [this.person, 'Is An Awesome', this.role].join(' ');
  console.log(reply);
}

var i = {
  person: 'Douglas Crockford', role: 'Javascript Developer'
};

greet.call(i); // Douglas Crockford Is An Awesome Javascript Developer

스펙

스펙 상태 설명
ECMAScript 1st Edition (ECMA-262) Standard 초기 정의. JavaScript 1.3에서 구현됨.
ECMAScript 5.1 (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

참조

문서 태그 및 공헌자

 이 페이지의 공헌자: Netaras, whitetofu, ligeek, jjhangu, teoli, ByungChangYoo, Jeado.Ko
 최종 변경: Netaras,