Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de 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 julio de 2015.
Resumen
El métodocall() llama a una función con un valor dadothis y con argumentos provistos individualmente.
In this article
Sintaxis
function.call(thisArg[, arg1[, arg2[, ...]]])
Parametros
thisArgOpcionalEl valor a usar como
thiscuando se llama afunction.Advertencia:En ciertos casos,
thisArgpuede no ser el valor actual visto por el método.Si el método es una función ennon-strict mode,
nullyundefinedserán reemplazados con el objeto global, y valores primitivos serán convertidos a objetos.arg1, arg2, ...Argumentos para el objeto.
Valor de retorno
El resultado de llamar a la función con elthis especificado y los argumentos.
Descripción
call() permite que una función/método que pertenece a un objeto, ser asignada y llamada para un objeto diferente.
call() provee un nuevo valor dethis a la función/método. Concall(), puedes escribir un método una vez y heredarlo a otro objeto, sin tener que reescribir el método en el nuevo objeto.
Nota:Mientras la sintaxis de esta función es casi identica a la funciónapply(), la diferencia fundamental es quecall() acepta unalista de argumentos, mientrasapply() accepta unarreglo sencillo de argumentos.
Ejemplos
>Usandocall para encadenar constructores para un objeto
Puede usarcall para encadenar constructores para un objeto (similar a Java).
En el siguiente ejemplo, el constructor para el objetoProducto es definido con dos parametros,nombre yprecio.
Otras dos funcionesComida yJuguete invocan aProducto, pasándothis,nombre yprecio.Producto inicializa las propiedadesnombre yprecio, ambas funciones especializadas definen lacategoria.
function Producto(nombre, precio) { this.nombre = nombre; this.precio = precio; if (precio < 0) throw RangeError( 'No se puede crear el producto "' + nombre + '" con un precio negativo', ); return this;}function Comida(nombre, precio) { Producto.call(this, nombre, precio); this.categoria = "comida";}Comida.prototype = new Producto();function Juguete(nombre, precio) { Producto.call(this, nombre, precio); this.categoria = "juguete";}Juguete.prototype = new Producto();var queso = new Comida("feta", 5);var diversion = new Juguete("robot", 40);Usandocall para invocar una función anónima
En este ejemplo, creamos una función anónima y usamoscall para invocarla en cada objeto en un arreglo.
El propósito principal de la función anónima aquí es agregar una funciónprint a cada objeto, el cual puede imprimir el índice correcto en el arreglo.
Nota:Pasar el objeto como valorthis no es estrictamente necesario, pero se hace con propósito explicativo.
var animales = [ { especie: "Leon", nombre: "Rey" }, { especie: "Whale", nombre: "Fail" },];for (var i = 0; i < animales.length; i++) { (function (i) { this.imprimir = function () { console.log("#" + i + " " + this.especie + ": " + this.nombre); }; this.imprimir(); }).call(animales[i], i);}