INVOCAZIONE DI FUNZIONI

Il codice all’interno di una funzione JavaScript verrà eseguito quando “qualcosa” lo invoca. Il codice non viene eseguito quando laJS 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”,
  fullNamefunction () {
    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”,
  fullNamefunction () {
    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:

THIS

IL LINGUAGGIO JAVASCRIPT

IL LINGUAGGIO JAVASCRIPT

LINK AL CODICE SU GITHUB

GITHUB