--- title: Function.prototype.call() slug: Web/JavaScript/Reference/Global_Objects/Function/call tags: - Function - JavaScript - Method translation_of: Web/JavaScript/Reference/Global_Objects/Function/call original_slug: Web/JavaScript/Referencia/Objetos_globales/Function/call ---
El método call()
llama a una función con un valor dado this
y con argumentos provistos individualmente.
function.call(thisArg[, arg1[, arg2[, ...]]])
thisArg
{{optional_inline}}this
cuando se llama a function
.Cuidado: En ciertos casos, thisArg
puede no ser el valor actual visto por el método.
Si el método es una función en {{jsxref("Strict_mode", "non-strict mode", "", 1)}}, {{jsxref("Global_Objects/null", "null")}} y {{jsxref("Global_Objects/undefined", "undefined")}} serán reemplazados con el objeto global, y valores primitivos serán convertidos a objetos.
arg1, arg2, ...
this
especificado y los argumentos.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 de this
a la función/método. Con call()
, puedes escribir un método ona vez y heredarlo a otro objeto, sin tener que reescribir el método en el nuevo objeto.
call()
acepta una lista de argumentos, mientras apply()
accepta un arreglo sencillo de argumentos.call
para encadenar constructores para un objetoPuede usar call
para encadenar constructores para un objeto (similar a Java).
En el siguiente ejemplo, el constructor para el objeto Producto
es definido con dos parametros, nombre
y precio
.
Otras dos funciones Comida
y Juguete
invocan a Producto
, pasándo this
, nombre
y precio
. Producto
inicializa las propiedades nombre
y precio
, ambas funciones especializadas definen la categoria
.
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);
call
para invocar una función anónimaEn este ejemplo, creamos una función anónima y usamos call
para invocarla en cada objeto en un arreglo.
El propósito principal de la función anónima aquí es agregar una función print
a cada objeto, el cual puede imprimir el índice correcto en el arreglo.
Pasar el objeto como valor this
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); }