Resumen
El método call()
llama a una función con un valor this
asignado y argumentos provistos de forma individual.
apply()
, la diferencia fundamental es que call()
acepta una lista de argumentos, mientras apply()
accepta un arreglo unico de argumentos.Sintaxis
fun.call(thisArg[, arg1[, arg2[, ...]]])
Parametros
thisArg
- El valor de
this
provisto por la llamada afun
. Note que este puede no ser el valor actual visto por el método: si el método es una función en código modo no estricto,null
yundefined
serán reemplazados con el objeto global, y valores primitivos serán convertidos a objetos. arg1, arg2, ...
- Argumentos para el objeto.
-
Valores de retorno
- El resultado de llamada a la función con los parametros definidos con
this
y los argumentos.
Descripción
Un objeto diferente this
puede ser asignado cuando una función existente es llamada. this
se refiere a el objeto actual, el objeto invocador. Con call
, puedes escribir un método una vez y entonces heredarlo en otro objeto, sin tener que reescribir el método para el nuevo objeto.
Ejemplos
Usando call
para encadenar constructores para un objeto
Usted puede usar call
para encadenar constructores para un objeto, similar a Java. En el siguiente ejemplo, el constructor para el objeto Product
es definido con dos parametros, name
y price
. Otras dos funciones Food
y Toy
invocan a Product
pasandole this,
name
y price
como argumentos. Product
inicializa las propiedades name
y price
, ambas funciones especializadas (Food
y Toy
) definen la propiedad category
.
function Product(name, price) { this.name = name; this.price = price; if (price < 0) throw RangeError('Cannot create product "' + name + '" with a negative price'); return this; } function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } Food.prototype = new Product(); function Toy(name, price) { Product.call(this, name, price); this.category = 'toy'; } Toy.prototype = new Product(); var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
Usando call
para invocar una función anónima
En este ejemplo simple y llanamente, creamos una función anónima y usamos call
para invocarla sobre 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 es capaz de imprimir el indice del objeto en el arreglo. Pasar el objeto como valor this
no era estrictamente necesario, pero fue hecho para propósito explicativo.
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); }