Function.prototype.call()

Resumen

El método call() llama a una función con un valor this asignado y argumentos provistos de forma individual.

NOTA: Mientras la sintaxis de esta función es casi identica a la función 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 a fun. 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 y undefined 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);
}

See also

Etiquetas y colaboradores del documento

Etiquetas: 
 Colaboradores en esta página: saulrp7, cristianmartinez, teoli, bluesky777
 Última actualización por: saulrp7,