←
{JS} Oggetti, istanze, prototipi ed ereditarietà
home / javascript /
Lucio Paolo Asciolla
Senior Full Stack Developer
Ogni cosa in JavaScript è o un valore primitivo o un oggetto.
Un oggetto è un costrutto, qualcosa di statico che ha determinate caratteristiche e tratti, come proprietà e metodi.
Tutti gli oggetti in Javascript sono basati sull'oggetto globale "Object" e da esso ereditano proprietà e metodi che vengono condivise tra loro.
| Proprietà | |
| costructor | restituisce in stringa il costruttore (es. "String") |
| prototype | restituisce il prototipo dell'oggetto ed aggiunge proprietà/metodi all'oggetto prototipo ed a tutte le sue istanze |
| Metodi | |
| toString() | restituisce una versione in stringa dell’oggetto |
| valueOf() | restituisce il corrispondente valore del tipo di dato primitivo |
Gli oggetti sono entità dotate di unicità e dinamicità che associano nomi di proprietà a valori.
In Javascript abbiamo la possibilità di creare oggetti personalizzati attraverso la "notazione letterale" o mediante "new Object" (costruttore di oggetti). Gli oggetti da noi creati erediteranno proprietà e metodi dell'oggetto globale "Global Object", in quanto loro prototipo.
var oggetto = {
nome : "Luca",
cognome: "Rossi"
};
JavaScript ha diversi generi di oggetti predefiniti, come:
| Object | Oggetto globale |
| Function | First Class Object |
| Array | Oggetto per gli array |
| Date | Oggetto per le date |
| Math | Oggetto per la manipolazione matematica dei valori |
| Number | Oggetto per i numeri |
| RegExp | Oggetto per le espressioni regolari |
| String | Oggetto per le stringhe |
Gli oggetti predefiniti non sono altro che costruttori di particolari oggetti specializzati nel effettuare determinate azioni, mediante i loro metodi e possono contengono determinate proprietà.
Gli oggetti predefiniti sono sempre discendenti di Object, loro prototipo
Il concetto di istanza è un argomento molto dibattuto ed è uno dei principi di astrazione della programmazione orientata agli oggetti.
Un istanza è la copia creata, con valori univoci, partendo da un riferimento, più semplicemente un costruttore.
function frutta(valore1, valore2, valore3) {
this.tipologia=valore1;
this.provenienza=valore2;
this.certificazioni=valore3;
}
Nel momento in cui invochiamo la funzione "costruttrice" tramite new creeremo un nuovo oggetto:
var pomodori = new frutta("Bacca", "Italiana", "BIO");
var meloni = new frutta("Frutta", "Italiana", "BIO");
pomodori e meloni sono istanze della funzione-costruttrice (Object-Constructor) "frutta".
JavaScript è dunque un linguaggio “ad oggetti” basato sul concetto di prototipo.
Un costruttore, come "new Object", è un’astrazione che definisce le caratteristiche che avranno gli oggetti creati da essa.
Quindi, in linea generale, un prototipo è quella funzione che funge da costruttore.
function frutta(valore1, valore2, valore3) {
this.tipologia=valore1;
this.provenienza=valore2;
this.certificazioni=valore3;
}
Il meccanismo su cui si basa l’erediterietà prototipale (prototypal inheritance) di JavaScript è abbastanza semplice: se una proprietà o metodo, non si trova in un oggetto, viene ricercata nel suo prototipo.
Questo spiega il motivo per cui tutti gli oggetti hanno delle proprietà e dei metodi, come toString(), condivisi, che di fatto sono ereditati, grazie al meccanismo di ereditarietà, dal proprio oggetto prototipo, l'oggetto globale "Object".
La specifica linguistica ECMAScript 2015 (ES6), ha introdotto le classi nel linguaggio JavaScript.
Le classi in JavaScript in realtà non offrono funzionalità aggiuntive e sono spesso descritte come "syntactical sugar" ovvero offrono una sintassi più pulita ed elegante.
Poiché la stragrande maggioranza dei linguaggi di programmazione utilizzano le classi, la sintassi della classe in JavaScript rende più semplice per gli sviluppatori spostarsi tra i vari linguaggi.
class persona {
constructor(nome, cognome, email, indirizzo) {
this.nome = nome;
this.cognome = cognome;
this.email = email;
this.indirizzo = indirizzo;
}
Una classe, nella programmazione orientata agli oggetti, è un costrutto di un linguaggio di programmazione usato come modello per creare oggetti. Il modello comprende attributi e metodi che saranno condivisi da tutti gli oggetti creati (istanze) a partire dalla classe. Un oggetto è, di fatto, l'istanza di una classe.
Una classe è identificabile come un tipo di dato astratto che può rappresentare una persona, un luogo, oppure una cosa, ed è quindi l'astrazione di un concetto, implementata in un software. Fondamentalmente, essa definisce al proprio interno lo stato, i cui dati sono memorizzati nelle cosiddette variabili membro o attributi, e il comportamento dell'entità di cui è rappresentazione, descritto da blocchi di codice riutilizzabili chiamati metodi.