Ereditarietà

http://www.adobe.com/devnet/html5/articles/javascript-object-creation.html

Ereditarietà prototipale

L’ ereditarietà prototipale è alternativa all’ operatore new.
JavaScript è un linguaggio prototipale non basato sulle classi: non si scrive una classe da estendere con l’ ereditarietà, bensì si crea direttamente un oggetto, e gli altri oggetti si creano a partire da questo specificando nuove proprietà: è l’ ereditarietà differenziale.

Ogni oggetto (creato sia come funzione costruttore che come oggetto prototipale) ha una proprietà prototype “nascosta”, che alcuni ambienti JS espongono come __proto__: però non essendo una parte standard del linguaggio, è meglio non usarla.
Con il metodo del costruttore, il prototype viene impostato come riferimento a __proto__.

Storicamente, il metodo del costruttore e l’ operatore new sono stati introdotti per venire incontro ai programmatori poco propensi all’ ereditarietà prototipale.
Inoltre, non esisteva una modalità nativa di creazione di oggetti a partire da un altro oggetto come prototipo.

Attualmente, quasi tutti i browser implementano Object.create: con esso si possono creare oggetti nuovi ed estendere oggetti esistenti.

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/

Object.create()

Creazione di un oggetto vuoto

Per creare un oggetto vuoto si possono usare i seguenti comandi equivalenti tra di loro:

var person = {};
// oppure
var person = OObject.create(null);

Per aggiungere una proprietà all’ oggetto vuoto si usa Object.defineProperty:

Object.defineProperty(person, 'firstName', {
  value: "mioNome",
  writable: true,
  enumerable: true,
  configurable: true
});
 
Object.defineProperty(person, 'lastName', {
  value: "mioCognome",
  writable: true,
  enumerable: true,
  configurable: true
});

Con Object.defineProperty si può controllare se la proprietà può essere writable, enumerable, o configurable.
Nel caso (molto comune) si voglia aggiungere una proprietà scrivibile, enumerabile e configurabile, si può usare direttamente la sintassi di assegnazione (operatore punto oppure parentesi quadre).

Prototype chain

Il concetto di catena prototipale è semplice: se si chiama una chiave (cioè una proprietà) di un oggetto ma non viene trovata, JavaScript andrà a cercarla nell’ oggetto puntato da prototype. Ciò si ripete fin quando la chiave non viene ritrovata in un prototipo della catena, o fin quando non si trova un prototipo null, nel qual caso viene ritornato undefined.
Creando un oggetto vuoto, il prototype di questo viene impostato ad Object.

Object Literals

Creare un oggetto con una sintassi letterale è più breve che usare la sintassi estesa:

var person = { firstName: "mioNome", lastName: "mioCognome" }
// equivale a:
var person = Object.create(Object.prototype);
person.firstName = "mioNome";
person.lastName  = "mioCognome";

La cosa più importante è che nel primo caso dobbiamo sapere che il prototipo del nuovo oggetto viene automaticamente impostato a Object.protoype con tutte le sue proprietà.
Se vogliamo invece creare un oggetto a partire da un altro come prototipo, si deve usare Object.create(vecchio_oggetto).

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...