JavaScript: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Oggetti e prototipi
Oggetti e prototipi e New (approfondimento)
Riga 135:
 
== Oggetti e prototipi ==
La programmazione orientata agli oggetti in JavaScript può risultare un po' complicatacaotica, questo perchè il concetto di [[w:Classe (informatica)|classe]] in JavaScript non esiste poichè è sostituitosostituita daldalla concettopossibilità di "prototipo".creare Unoggetti prototipomanualmente èo unatramite struttura"prototipi che può cambiare nel tempo:polimorfi".
 
Un oggetto creato manualmente:
<source lang="javascript">
var marioRossi.goal(); = {
// Questo è il costruttore di un oggetto
name: 'Mario Rossi',
function GamePlayer(name, surname) {
score: 0,
goal = function () {
this.score++;
}
};
 
marioRossi.goal();
 
console.log( marioRossi.score );
</source>
''Output'': <code>1</code>
 
 
O ancora manualmente:
<source lang="javascript">
var marioRossi = {name: 'Mario Rossi', score: 0};
 
// Appendo un metodo
marioRossi.goal = function() {
this.score++;
}
 
marioRossi.goal();
 
console.log( marioRossi.score );
</source>
''Output'': <code>1</code>
 
 
Un oggetto creato tramite un prototipo:
<source lang="javascript">
// Questa funzione costruirà il mio oggetto
function GamePlayer(name, surname) {
this.name = name;
this.surname = surname;
this.score = 0;
}
 
// Istanzio un nuovo oggetto col costruttore
var marioRossi = new GamePlayer('Mario', 'Rossi');
 
// Posso appendereAppendo un nuovo metodo in qualsiasial momentoprototipo
GamePlayer.prototype.goal = function () {
this.score++;
};
 
marioRossi.goal();
marioRossi.goal();
marioRossi.goal();
 
ifconsole.log( marioRossi.score > 2 ) {;
alert( marioRossi.name + ' ha più di due punti' );
} else {
alert( marioRossi.name + ' ha meno di due punti' );
</source>
''Output'': <code>1</code>
 
 
In quest'altro esempio si modifica il prototipo di <code>String</code> per aggiungerci un metodo personalizzato:
Si può anche modificare uno dei prototipi predefiniti per appenderci metodi personalizzati:
<source lang="javascript">
// Appendo il metodo sandwich() nel prototipo String
String.prototype.sandwich = function (bread) {
return bread + this + bread;
Line 174 ⟶ 204:
 
''Output'': <code>@@Wikiversità@@</code>
 
=== New (approfondimento) ===
Dato che una funzione e un costruttore per l'interprete JavaScript sono la stessa cosa, è importante ricordarsi di esplicitare la parola chiave <code>new</code> se si sta istanziando un oggetto con un costruttore. Omettere <code>new</code> fa ottenere l'eventuale valore di ritorno della funzione.
 
In questo esempio stampo in console un oggetto correttamente creato col costruttore, e poi ciò che otterrei senza <code>new</code>:
<source lang="javascript">
// Definisco un costruttore
function GamePlayer(nome) {
this.surnamenome = surnamenome;
this.score = 0;
 
// Per scopo didattico la funzione ha valore di ritorno
return "Eh? Mi usi come funzione?";
}
 
console.log( new GamePlayer('Mario Rossi') );
console.log( GamePlayer('Mario Rossi') );
</source>
''Output'': <code>Object { nome: "Mario Rossi", score: 0 }</code><br />
''Output'': <code>"Eh? Mi usi come funzione?"</code>