Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Function.prototype.call()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
Introdução
O métodocall() invoca uma função com um dado valorthis e argumentos passados individualmente.
Nota:Apesar de a sintaxe desta função ser quase idêntica à deapply(), a principal diferença é quecall() aceita umalista de argumentos, enquantoapply() aceitaum único array de argumentos.
In this article
Sintaxe
fun.call(thisArg[, arg1[, arg2[, ...]]])
Parâmetros
thisArgO valor de
thisproveu a chamada parafun. Note quethispode não ser o valor atual visto pelo método: se esse método é uma função emnon-strict mode code,nulleundefinedserão reescritos com o objeto global, e valores primitivos serão encaixados.arg1, arg2, ...Argumentos para o objeto.
Descrição
Você pode atribuir um objetothis diferente quando executar uma função existente.this refere-se ao objeto atual, o objeto em execução. Comcall, 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.
Exemplos
>Exemplo: Usandocall para encadear construtores para um objeto
Você pode usarcall para encadear construtores para um objeto, similar ao Java. No seguinte exemplo, o construtor do objetoProduct é definido com dois parâmetros,name eprice. Outras duas funçõesFood eToy executamProduct passandothis,name eprice. O Produto inicializa as propriedadesname eprice, ambos definem ocategory.
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);Exemplo: Usando ocall para chamar funções anônimas
Neste exemplo, criamos uma função anônima que usa ocall 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 comothis , 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);}Usandocall 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 JavascriptEspecificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function.prototype.call> |