--- title: Function.prototype.call() slug: Web/JavaScript/Reference/Global_Objects/Function/call tags: - Função - JavaScript - Método(2) translation_of: Web/JavaScript/Reference/Global_Objects/Function/call ---
O método call()
invoca uma função com um dado valor this
e argumentos passados individualmente.
Nota: Apesar de a sintaxe desta função ser quase idêntica à de {{jsxref("Function.prototype.apply", "apply()")}}, a principal diferença é que call()
aceita uma lista de argumentos, enquanto apply()
aceita um único array de argumentos.
fun.call(thisArg[, arg1[, arg2[, ...]]])
thisArg
this
proveu a chamada para fun
. Note que this
pode não ser o valor atual visto pelo método: se esse método é uma função em {{jsxref("Functions_and_function_scope/Strict_mode", "non-strict mode", "", 1)}} code, {{jsxref("Global_Objects/null", "null")}} e {{jsxref("Global_Objects/undefined", "undefined")}} serão reescritos com o objeto global, e valores primitivos serão encaixados.arg1, arg2, ...
Você pode atribuir um objeto this
diferente quando executar uma função existente. this
refere-se ao objeto atual, o objeto em execução. Com call
, você pode escrever um método uma vez e então herdá-lo em outro objeto, sem ter que reescrever o método para o novo objeto.
call
para encadear construtores para um objetoVocê pode usar call
para encadear construtores para um objeto, similar ao Java. No seguinte exemplo, o construtor do objeto Product
é definido com dois parâmetros, name
e price
. Outras duas funções Food
e Toy
executam Product
passando this,
name
e price
. O Produto inicializa as propriedades name
e price
, ambos definem o 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'); } return this; } function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } Food.prototype = Object.create(Product.prototype); function Toy(name, price) { Product.call(this, name, price); this.category = 'toy'; } Toy.prototype = Object.create(Product.prototype); var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
call
para chamar funções anônimasNeste exemplo, criamos uma função anônima que usa o call
para executá-lo em todos os objetos em um array(vetor). O principal propósito da função anônima aqui é adicionar uma função print para todo o objeto, que está disponível para imprimir o índice correto do objeto no array. Não foi necessário passar o valor do objeto como this
, mas isso foi feito apenas para explicação.
var animais = [ { especie: 'Lion', nome: 'King' }, { especie: 'Whale', nome: 'Fail' } ]; for (var i = 0; i < animais.length; i++) { (function(i) { this.print = function() { console.log('#' + i + ' ' + this.especie + ': ' + this.nome); } this.print(); }).call(animais[i], i); }
call
para chamar a função e especificar o contexto de 'this'No exemplo abaixo, quando vamos chamar a apresentação, o valor de this será associado ao objeto i.
function apresentacao() {
var resposta = [this.pessoa, 'é um excelente', this.funcao].join(' ');
console.log(resposta);
}
var i = {
pessoa: 'Douglas Crockford', funcao: 'Desenvolvedor Javascript'
};
apresentacao.call(i); // Douglas Crockford é um excelente Desenvolvedor Javascript
Especificações | Status | Comentário |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Definição inicial. Implementado no JavaScript 1.3. |
{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}} | {{Spec2('ES6')}} |
Funcionalidade | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suporte básico | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Funcionalidade | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Suporte básico | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |