--- title: Function.prototype.call() slug: Web/JavaScript/Reference/Global_Objects/Function/call translation_of: Web/JavaScript/Reference/Global_Objects/Function/call ---
{{JSRef}}

Il metodo call() esegue una funzione con un dato valore this e argomenti passati singolarmente.

Note: Mentre la sintassi di questa funzione è quasi identica a quella di {{jsxref("Function.prototype.apply", "apply()")}}, la differenza fondamentale è che call() accetta una lista di argomenti mentre apply() accetta un singolo array di argomenti.

{{EmbedInteractiveExample("pages/js/function-call.html")}}

Sintassi

func.call([thisArg[, arg1, arg2, ...argN]])

Parametri

thisArg {{optional_inline}}

Il valore da usare come this quando si esegue func.

Attenzione: In certi casi, thisArg potrebbe non essere il valore reale visto dal metodo.

Se il metodo è una funzione in {{jsxref("Strict_mode", "non-strict mode", "", 1)}}, {{jsxref("Global_Objects/null", "null")}} e {{jsxref("Global_Objects/undefined", "undefined")}} sarà sostituito dall'oggetto globale e i valori di tipo primitiva verranno convertiti in oggetti.

arg1, arg2, ...argN {{optional_inline}}
Argomenti per la funzione.

Valore restituito

Il risultato dell'esecuzione della funzione con il this e gli argomenti specificati.

Descrizione

Il metodo call() consente a una funzione/metodo appartenente a un oggetto di essere essere assegnata e chiamata per un oggetto diverso..

call() fornisce un nuova valore di this alla funzione/metodo. Con call(), si può scrivere un metodo una volta ed ereditarlo in un altro oggetto senza dover riscrivere il metodo per il nuovo oggetto.

Esempi

Usare call per collegare costruttori per un oggetto

Si può usare call per collegare costruttori per un oggetto (simile a Java).

Nell'esempio seguente, il costruttore per l'oggetto Product è definito con 2 parametri: name e price.

Due altre funzioni, Food e Toy, invocano Product, passando this, name, e price. Product inizializza le proprietà name e price. Entrambe le funzioni specializzate definiscono la category.

function Product(name, price) {
  this.name = name;
  this.price = price;
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}

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

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

Usare call per invocare una funzione anonima

In questo esempio, viene create una funzione anonima e usato call per invocarla su ogni oggetto di un array.

Lo scopo principale della funzione anonima qui è di aggiungere una funzione print o ogni oggetto il quale è in grado di stampare il corretto indice dell'oggetto nell'array.

Passare l'oggetto come valore this non è strettamente necessario ma è fatto a scopo esplicativo.

const animals = [
  { species: 'Lion', name: 'King' },
  { species: 'Whale', name: 'Fail' }
];

for (let i = 0; i < animals.length; i++) {
  (function(i) {
    this.print = function() {
      console.log('#' + i + ' ' + this.species
                  + ': ' + this.name);
    }
    this.print();
  }).call(animals[i], i);
}

Usare call per invocare una funzione e specificare il contesto per  'this'

Nell'esempio sotto, quando viene eseguita greet, il valore di this verrà legato all'oggetto obj.

function greet() {
  const reply = [this.animal, 'typically sleep between', this.sleepDuration].join(' ');
  console.log(reply);
}

const obj = {
  animal: 'cats', sleepDuration: '12 and 16 hours'
};

greet.call(obj);  // cats typically sleep between 12 and 16 hours

Usare call per invocare una funzione senza specificare il primo parametro

Nell'esempio sotto, viene invocata la funzione display senza passare il primo parametro. Se il primo parametro non è passato il valore di this è legato all'oggetto globale.

var sData = 'Wisen';

function display() {
  console.log('sData value is %s ', this.sData);
}

display.call();  // sData value is Wisen

Attenzione: In strict mode il valore di this sarà undefined. Vedere sotto.

'use strict';

var sData = 'Wisen';

function display() {
  console.log('sData value is %s ', this.sData);
}

display.call(); // Cannot read the property of 'sData' of undefined

Specifiche

Specifiche
{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}

Browser compatibility

{{Compat("javascript.builtins.Function.call")}}

See also