JavaScript/Oggetti: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Ramac (discussione | contributi)
sistemo
Ramac (discussione | contributi)
Riga 15: Riga 15:


== Gli oggetti in JavaScript ==
== Gli oggetti in JavaScript ==
JavaScript permette di creare i propri [[JavaScript/Costruttori e prototipi|oggetti personalizzati]]; tuttavia noi lavoreremo solo su quelli predefiniti.
JavaScript permette di creare i propri [[JavaScript/Costruttori e prototipi|oggetti personalizzati]]; tuttavia per imparare è meglio iniziare a lavorare sugli oggetti predefiniti del linguaggio.


Per creare una nuova istanza di un oggetto è necessario utilizzare una funzione chiamata '''costruttore'''. Di fatto, in realtà, per definire un oggetto prototipo è quindi sufficiente creare un nuovo costruttore.
Per creare una nuova istanza di un oggetto è necessario utilizzare una funzione chiamata '''costruttore'''. Di fatto, in realtà, per definire un oggetto prototipo è quindi sufficiente creare un nuovo costruttore.
Riga 30: Riga 30:
</source>
</source>


Supponiamo di avere a che fare con un oggetto macchina implementato in JavaScript. Per inizializzare la variabile "<code>la_mia_macchina</code>" dobbiamo dunque richiamare la funzione costruttore del prototipo macchina, che per esempio potrebbe prevedere un parametro "modello" e "colore vernice":
Per fare un esempio con la nostra macchina:
<source lang=javascript>
<source lang=javascript>
var la_mia_macchina = new macchina ("Utilitaria", "Rosso");
var la_mia_macchina = new macchina ("Fiat Bravo", "Rosso");
</source>
</source>
Nell'esempio, il costruttore dell'oggetto macchina prevederà come parametri il tipo e il colore della macchina.


=== Proprietà ===
=== Proprietà ===
Riga 41: Riga 40:
nome_oggetto.nome_proprietà
nome_oggetto.nome_proprietà
</source>
</source>
Alcune proprietà possono essere di sola lettura, cioè il loro valore può essere letto ma non modificato.
Alcune proprietà possono essere di sola lettura, cioè il loro valore può essere letto ma non modificato: esse sono infatti legate a caratteristiche intrinseche dell'oggetto, oppure sono determinate dal prototipo in base a dati forniti in precedenza.


Con la nostra macchina:
Se ad esempio riverniciamo la nostra macchina, ne cambiamo la proprietà "colore_vernice":
<source lang=javascript>
la_mia_macchina.colore_vernice = "Giallo"
</source>
Inoltre, supponiamo che il prototipo preveda la ricerca automatica della lunghezza della macchina in base al modello e che tale valore sia stato memorizzato nella proprietà di sola lettura "lunghezza" (infatti non è possibile intervenire sulla lunghezza della macchina, una volta scelto il modello):
<source lang=javascript>
<source lang=javascript>
<source lang=javascript>
alert('La mia macchina è lunga ' + la_mia_macchina.lunghezza + ' m!');
alert('La mia macchina è lunga ' + la_mia_macchina.lunghezza + ' m!');
</source>
</source>
Come si potrà pensare, la proprietà <code>lunghezza</code> è di sola lettura.


=== Metodi ===
=== Metodi ===

Versione delle 16:18, 23 ago 2010

Indice del libro

Il concetto di oggetto è molto importante nella programmazione in JavaScript. In questo modulo verranno spiegate le caratteristiche comuni degli oggetti; nei moduli seguenti verranno invece trattati nel dettaglio gli oggetti intrinsechi di JavaScript.

L'uso degli oggetti e delle loro funzionalità entra a far parte del paradigma della programmazione orientata agli oggetti (abbreviata OOP, Object Oriented Programming)

Cosa sono gli oggetti

Per avvicinarci al concetto di oggetto in informatica, possiamo pensare al concetto di oggetto nel mondo reale.
Per creare un nuovo oggetto è necessario partire da un modello (in JavaScript un oggetto chiamato prototipo) che indichi come creare altri oggetti dello stesso tipo (ogni oggetto è un'istanza del prototipo).

Gli oggetti possono inoltre possedere delle caratteristiche (proprietà): nel caso ad esempio di macchina (per fare un paragone con la realtà), saranno la cilindrata, le dimensioni, il costo, ecc....

Ciascuna istanza espone inoltre la possibilità di effettuare delle operazione su di essi (metodi): per la nostra macchina, metterla in moto o guidare. Queste operazioni modificheranno delle caratteristiche come il livello del suo carburante o la velocità.

Una volta introdotto il concetto di oggetto, dobbiamo avere però la capacità di astrarre: gli oggetti dell'informatica non corrispondono a quelli della realtà; hanno però numerosi vantaggi, tra i quali la possibilità di trattare dati più complessi di numeri e stringhe.

Gli oggetti in JavaScript

JavaScript permette di creare i propri oggetti personalizzati; tuttavia per imparare è meglio iniziare a lavorare sugli oggetti predefiniti del linguaggio.

Per creare una nuova istanza di un oggetto è necessario utilizzare una funzione chiamata costruttore. Di fatto, in realtà, per definire un oggetto prototipo è quindi sufficiente creare un nuovo costruttore.

La sintassi quindi:

var variabile = new nome_oggetto ();

In questo modo la variabile variabile sarà l'unico modo per fare riferimento all'istanza di nome_oggetto appena creata.

I costruttori solitamente prevedono anche una serie di parametri per impostare automaticamente alcune proprietà dell'oggetto creato:

var variabile  = new nome_oggetto (parametri_del_costrutture);

Supponiamo di avere a che fare con un oggetto macchina implementato in JavaScript. Per inizializzare la variabile "la_mia_macchina" dobbiamo dunque richiamare la funzione costruttore del prototipo macchina, che per esempio potrebbe prevedere un parametro "modello" e "colore vernice":

var la_mia_macchina = new macchina ("Fiat Bravo", "Rosso");

Proprietà

Possiamo pensare ad una proprietà come ad una variabile associata al singolo oggetto; il suo valore viene attribuito inizialmente dal costruttore e successivamente viene modificato agendo sull'oggetto (operando sui metodi, ecc...). Per fare riferimento alla proprietà (per il recupero o per l'assegnazione) si usa la sintassi:

nome_oggetto.nome_proprietà

Alcune proprietà possono essere di sola lettura, cioè il loro valore può essere letto ma non modificato: esse sono infatti legate a caratteristiche intrinseche dell'oggetto, oppure sono determinate dal prototipo in base a dati forniti in precedenza.

Se ad esempio riverniciamo la nostra macchina, ne cambiamo la proprietà "colore_vernice":

la_mia_macchina.colore_vernice = "Giallo"

Inoltre, supponiamo che il prototipo preveda la ricerca automatica della lunghezza della macchina in base al modello e che tale valore sia stato memorizzato nella proprietà di sola lettura "lunghezza" (infatti non è possibile intervenire sulla lunghezza della macchina, una volta scelto il modello):

<source lang=javascript>
alert('La mia macchina è lunga ' + la_mia_macchina.lunghezza + ' m!');

Metodi

Un metodo è una funzione associata al singolo oggetto e definito nel costruttore; se nel prototipo è prevista una funzione metodo_esempio sarà possibile eseguire la funzione tramite la sintassi:

nome_oggetto.metodo_esempio () //ricordarsi le parentesi anche se non passiamo parametri!

Dal momento che le funzioni possono prevedere un valore di ritorno, sarà possibile inserire la notazione vista precedentemente all'intero di un'espressione.

Ad esempio, con la nostra macchina:

la_mia_macchina.rifornisci (20) //20 euro di benzina

La struttura with

Quando si lavora con gli oggetti, può risultare comodo il costrutto with, che permette di accedere più volte ad un oggetto senza dover ogni volta specificare il suo nome. Ad esempio:

with (la_mia_macchina) {
 .rifornisci (20) //20 euro di benzina
 alert(.lunghezza); //ricordarsi l'uso del punto!
 altra_macchina.rifornisci(50); //per riferirmi ad altri oggetti devo indicare il loro nome
} //qui si conclude il blocco with