# JavaScript/Oggetti

JavaScript
Copertina Tutti i moduli · Sviluppo
* IntroduzioneJavaScript/Introduzione
* Il nostro primo programmaJavaScript/Il nostro primo programma
* Tipi di dati e variabiliJavaScript/Tipi di dati e variabili
* Operatori e castingJavaScript/Operatori e casting
* Le strutture di controllo
** SelezioneJavaScript/Selezione
** IterazioneJavaScript/Iterazione
* Funzioni definite dall'utenteJavaScript/Funzioni definite dall'utente
* Programmazione ad oggettiJavaScript/Oggetti
** Oggetto StringJavaScript/Oggetto String
** Oggetto MathJavaScript/Oggetto Math
** Oggetto DateJavaScript/Oggetto Date
** Oggetto ArrayJavaScript/Oggetto Array
* CookieJavaScript/Cookie
* TimerJavaScript/Timer
* L'oggetto windowJavaScript/BOM
** Gli eventi nel BOMJavaScript/Gli eventi nel BOM
** Oggetto documentJavaScript/Oggetto document
** Altri oggetti del BOMJavaScript/Altri oggetti del BOM
* Il Document Object ModelJavaScript/DOM
** Proprietà e metodiJavaScript/Proprietà e metodi del DOM
** Gli eventi nel DOMJavaScript/Gli eventi nel DOM
* Espressioni regolariJavaScript/Espressioni regolari
* AJAX
** Introduzione ad AJAXJavaScript/Introduzione ad AJAX
** Usare AJAXJavaScript/Usare AJAX
* Costruttori e prototipiJavaScript/Costruttori e prototipi
* AppendiceJavaScript/Appendice
* CreditiJavaScript/Crediti
Modifica il sommario
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 intrinseci 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 operazioni 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 si utilizza una funzione chiamata costruttore. Di fatto, in realtà, per definire un oggetto prototipo è quindi sufficiente creare un nuovo costruttore.
La sintassi quindi:
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:
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":
E' possibile creare un oggetto anche assegnando a una variabile delle coppie chiave - valore:

### 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:
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":
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):

### 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:
Dal momento che le funzioni possono prevedere un valore di ritorno, sarà possibile inserire la notazione vista precedentemente all'interno di un'espressione.
Ad esempio, con la nostra macchina:
NOTA: l'esempio riportato non ha nulla a che vedere con le intenzioni espresse, poiché aggiunge semplicemente un parametro di ingresso al metodo, senza alcun "valore di ritorno" previsto e/o salvato. Correggere.

## 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:

## Creare oggetti personalizzati

Per creare oggetti personalizzati, consultare il modulo Costruttori e prototipi.