Corsi on-line

JavaScript: operatore new e valori di ritorno

In alcuni casi è possibile fare ricorso all’operatore new di JavaScript con lo scopo di allocare degli oggetti. Nello specifico new permette la restituzione di una nuova istanza di un oggetto, tale risultato sarà possibile attraverso l’impiego di un costruttore, la keyword this farà poi riferimento al nuovo oggetto creato attraverso new. Nel caso in cui la funzione coinvolta dovesse essere richiamata senza l’utilizzo di new, allora non si avrà alcuna creazione di un nuovo oggetto.

javascript_logoUn meccanismo complicato? Non necessariamente. Un semplice esempio in grado di spiegare meglio quanto descritto in precedenza potrebbe essere il seguente:

function Mrw() {
  this.xy = 11;
  this.yz = 22;
}
var myMrw = new Mrw();
myMrw.xy 
myMrw.yz

Avremo quindi “11” per myMrw.xy , cioè il valore this.xy prima dell’istanza, e “22” per myMrw.yz, cioè il valore this.yz prima dell’istanza. Se avessimo richiamato Mrw() senza far ricorso a new non avremmo ottenuto alcun nuovo oggetto. Per inserire un ulteriore elemento che aiuti a fare chiarezza è possibile riferirsi ad un ulteriore esempio:

function Mrw() {
  this.xy = 11;
  this.yz = 22;
  return 55;
}
var myMrw = new Mrw();

In questo caso, nonostante il valore di ritorno specificato per Mrw(), l’eventuale indicazione di myMrw.xy e myMrw.yz porterà comunque ad una riproposizione dei valori associati a this.xy e this.yz. Quindi come gestire correttamente eventuali valori di ritorno? La procedura necessaria è la seguente:

function Mrw() {
  this.xy = 11;
  this.xz = 22;
  return {
    ab: 33,
    cd: 44
  };
}
var myMrw = new Mrw();

Sostanzialmente, quando utilizziamo new per richiamare un funzione che restituisce dei valori primitivi esso non permetterà di restituire i valori di ritorno che sono stati predefiniti, si limiterà invece a proporre l’istanza this della funzione, cioè il valore originariamente associato prima dell’istanza, a meno di non definire dei valori al di fuori di quest’ultima.

Post correlati
I più letti del mese
Tematiche