INVOCAZIONE DI FUNZIONI
Il codice all’interno di una funzione JavaScript verrà eseguito quando “qualcosa” lo invoca. Il codice non viene eseguito quando la funzione è definita ma quando la funzione viene richiamata. È comune usare il termine “chiamare una funzione” invece di “richiamare una funzione”. È anche comune dire “richiamare una funzione”, “avviare una funzione” o “eseguire una funzione”. In questo tutorial useremo invoke, perché una funzione JavaScript può essere invocata senza essere chiamata.
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // Will return 20
La funzione sopra non appartiene a nessun oggetto. Ma in JavaScript c’è sempre un oggetto globale predefinito. In HTML l’oggetto globale predefinito è la pagina HTML stessa; quindi, la funzione sopra “appartiene” alla pagina HTML. In un browser l’oggetto della pagina è la finestra del browser. La funzione sopra diventa automaticamente una funzione dell’oggetto window.
Nota
Questo è un modo comune per invocare una funzione JavaScript, ma non è una pratica molto buona. Le variabili globali, i metodi o le funzioni possono creare facilmente conflitti di nome e bug nell’oggetto globale. myFunction() e window.myFunction() sono la stessa funzione:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // Will also return 20
L’OGGETTO GLOBALE
Quando una funzione viene chiamata senza un oggetto proprietario, il valore di this diventa l’oggetto globale. In un browser web l’oggetto globale è la finestra del browser. Questo esempio restituisce l’oggetto window come valore di this:
let x = myFunction(); // x will be the window object
function myFunction() {
return this;
}
Invocare una funzione come funzione globale, fa sì che il valore di this sia l’oggetto globale. L’utilizzo dell’oggetto window come variabile può facilmente causare il crash del programma.
INVOCARE UNA FUNZIONE COME METODO
In JavaScript puoi definire funzioni come metodi oggetto. L’esempio seguente crea un oggetto (myObject), con due proprietà (firstName e lastName) e un metodo (fullName):
const myObject = {
firstName:“John”,
lastName: “Doe”,
fullName: function () {
return this.firstName + ” ” + this.lastName;
}
}
myObject.fullName(); // Will return “John Doe”
Il metodo fullName è una funzione. La funzione appartiene all’oggetto. myObject è il proprietario della funzione. This è l’oggetto che “possiede” il codice JavaScript. In questo caso il valore di this è myObject. Provalo! Modifica il metodo fullName per restituire il valore di this:
const myObject = {
firstName:“John”,
lastName: “Doe”,
fullName: function () {
return this;
}
}
myObject.fullName();
// This will return [object Object] (the owner object)
Se una chiamata di funzione è preceduta dalla parola chiave new, si tratta di una chiamata del costruttore. Sembra che tu crei una nuova funzione, ma poiché le funzioni JavaScript sono oggetti, in realtà crei un nuovo oggetto:
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
const myObj = new myFunction(“John”, “Doe”);
// This will return “John”
myObj.firstName;
La parola chiave this nel costruttore non ha un valore. Il valore di this sarà il nuovo oggetto creato quando viene richiamata la funzione.
COS’E’ THIS?
In JavaScript, la parola chiave this si riferisce a un oggetto. Quale oggetto dipende da come viene invocato (usato o chiamato). La parola chiave this si riferisce a oggetti diversi a seconda di come viene utilizzata:
Scrivi un commento