MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

Function.prototype.call()

Esta tradução está incompleta. Por favor, ajude a traduzir este artigo do Inglês.

O método call() realiza a chamada de uma função com o parâmetros this além de outros parâmetros fornecidos individualmente.

Note:  Enquanto a sintaxe desta função é praticamente idêntica a  apply(), a principal diferença é que  call() aceita uma lista de parâmetros, enquanto que apply() aceita um único  array de parâmetros.

Sintaxe

function.call(thisArg, arg1, arg2, ...)

Parâmetros

thisArg
O valor de this fornecido para a chamada de uma function. Perceba que este valor pode não ser visualizado pelo método em questão: Se o método for uma função em non-strict mode code, null e undefined este valor será substituido pelo objeto global e valores primitivos serão convertidos para objetos.
arg1, arg2, ...
Parâmetros para o objeto.

Valor de retorno

O resultado ao chamar a função em questão com os parâmetros this e os outros argumentos especificados.

Descrição

Um objeto this pode ser fornecido para utilização de uma função, quando esta função for invocada. Por padrão, this refere-se ao objeto corrente, o objeto que foi chamado. Com o call, é possível implementar o método uma única vez possibilitando sua herança em outro novo objeto sem ter que escrever um novo método para este novo objeto.

Exemplos

Utilizando call para encadear construtores para um objeto

É possível utilizar call para encadear construtores para um objeto assim como em Java. No exemplo abaixo o construtor para o objeto Product é definido com 2 parâmetros: name e price. Duas outras funções, Food e Toy, invocam Product passando por parâmetro thisname e price. Product inicializa as propriedades name and price.

function Product(name, price) {
  this.name = name;
  this.price = 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);

Usando call para invocar uma função anônima

Neste exemplo,criamos uma função anônima e utilizamos call para invocá-la em cada objeto do array. O principal objetivo da função anônimaé inserir a função print em cada objeto. Esta função print é capaz de imprimir o índice correto do objeto no array. Passar o objeto this não era estritamente necessário mas foi feito a título de explicação.

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

Utilizando call para invocar a função especificando o  contexto para 'this'

No exemplo abaixo, quando chamamos greet o valor de this passará a referenciar o objeto 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

Specifications

Especificação Status Comentário
ECMAScript 1st Edition (ECMA-262) Standard Initial definition. Implemented in 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 Latest Draft (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Draft  

Compatibilidade de Navegadores

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)

Veja também

Etiquetas do documento e contribuidores

 Contribuidores para esta página: Mega85
 Última atualização por: Mega85,