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
thisprovisto 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,nullyundefinedserá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
thisy 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);
}