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'
Un oggetto creato manualmente:
<source lang="javascript">
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
this.name = name;
this.surname = surname;▼
this.score = 0;
}
// Istanzio un nuovo oggetto col costruttore
var marioRossi = new GamePlayer('Mario
//
GamePlayer.prototype.goal = function () {
this.score++;
};
▲marioRossi.goal();
▲marioRossi.goal();
marioRossi.goal();
▲}
</source>
''Output'': <code>1</code>
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.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>
|