This translation is incomplete. Please help translate this article from English.

Rezumat

Metoda call() apelează o funcție ce primește ca prim argument valoarea this și un număr de argumente specificate individual.

Note: Deși sintaxa este asemănătoare cu cea a funcției apply(), diferența fundamentală constă în faptul că funcția call() acceptă o listă de argumente, în timp ce apply() acceptă un singur array de argumente..

Sintaxa

function.call(thisArg[, arg1[, arg2[, ...]]])

Parametri

thisArg
Opțional. Valoare this pentru apelul function. Este posibil ca aceasta valoare sa nu fie vizibilă funcției: dacă metoda este în funcție în cod non-strict mode, null și undefined vor fi înlocuite cu obiectul global și valorile primitive vor fi boxed.
arg1, arg2, ...
Argumente pentru obiect.

Descriere

Poți asigna un alt obiect this atunci când apelezi o funcție existentă. this se referă la obiectul curent, cel care face apelul.

Cu ajutorul funcției call poți scrie o singură dată o metodă ce poate fi moștenită de un alt obiect fără a fi nevoit sa rescrii acea metodă pentru noul obiect.

Exemple

Folosind call pentru a înlănțui constructorii unui obiect

Poți folosi call pentru a înlățui constructorii unui obiect, metoda asemănătoare cu cea din Java. În exemplul următor, constructorul pentru obiectul Product primește doi parametri: name și price. Alte două funcții, Food și Toy apelează Product având ca parametru this, name și price. Product inițializează proprietățile name și price, ambele funcții definind 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 = Object.create(Product.prototype);

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}
Toy.prototype = Object.create(Product.prototype);

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

Folosind call pentru a apela funcții anonime

În acest exemplu creem o funcție anonimă și o apelăm pentru orice obiect din Array cu ajutorul funcției call. Scopul acestei funcții anonime este de a adăuga o funcție de tip prin pentru fiecare obiect, capabilă să printeze index-ul corect pentru fiecare obiect din Array. Nu este absolut necesară specificarea obiectului prin valoarea this.

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);
}

Specificații

Specification Status Comment
ECMAScript 3rd Edition. Implemented in JavaScript 1.3. Standard Definiția inițială.
ECMAScript 5.1 (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  

Compatibilitatea pentru Browsere

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Vezi și

Document Tags and Contributors

Contributors to this page: nicu-chiciuc, aciurea, stan.alexandru.cristian
Last updated by: nicu-chiciuc,