Giunto alla versione 5 (o edizione), ECMAScript ha fatto sue le richieste di molti sviluppatori e implementatori, nonchè indirettamente anche dei traguardi raggiunti dai framework JavaScript, e le ha condensate in nuovi metodi e proprietà che permettono oggi ai browser che supportano questa versione nella loro implementazione JavaScript di fornire agli sviluppatori degli strumenti assolutamente impensabili fino a pochi anni fa. Vediamone insieme alcune avendo come riferimento l'implementazione di Firefox.
Object.create()
Crea un nuovo oggetto con l'oggetto prototype
e le proprietà specificate come parametri:
Sintassi
Object.create(proto [, propertiesObject])
Parametri
- proto
- L'oggetto scelto come
prototype
per il nuovo oggetto creato. - propertiesObject
- Se viene specificato, le sue proprietà e valori saranno le proprietà e i valori del nuovo oggetto creato.
Esempi
function Constructor(){}
var o = Object.create(Constructor.prototype);
var o2 = Object.create({}, { p: { value: 42 } });
Discussione
Il metodo create()
normalizza una situazione preesistente rispetto alle specifiche ECMAScript 5, ossia l'utilizzo di pattern per legare un oggetto JavaScript ad una proprietà prototype
specifica e per inizializzare il nuovo oggetto con una serie di proprietà e valori. Tracce di questi pattern possono essere individuate ad esempio nel metodo create()
dell'oggetto Class
in Prototype o in alcuni costrutti resi popolari da Douglas Crockford.
Riferimenti
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create
Object.preventExtensions()
Impedisce a nuove proprietà di essere aggiunte all'oggetto (ossia, l'oggetto non può più essere esteso):
Sintassi
Object.preventExtensions(obj)
Parametri
- obj
- L'oggetto di cui si vuole bloccare l'estensibilità.
Esempi
var obj = {
prop: 1
};
var objLocked = Object.preventExtensions(obj);
objLocked.prop2 = 2; // TypeError
Discussione
Questo metodo, che compensa la mancanza di implementazione in JavaScript delle parole chiave final
o static
, rende di fatto obsoleti molti pattern JavaScript che emulavano questo comportamento.
Riferimenti
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions
Array.isArray()
Restituisce un valore booleano che determina se l'oggetto è un array o no:
Sintassi
Array.isArray(obj)
Parametri
- obj
- L'oggetto da verificare.
Esempi
var arr = [];
var str = '';
Array.isArray(arr); // true
Array.isArray(str); // false
Discussione
Dopo l'enfasi posta da molti pattern e framework JavaScript sulla necessità di un metodo che verifichi se un oggetto è un array, ECMAScript raccoglie questi input e li condensa in un metodo che è la versione standard della seguente routine:
if(!Array.isArray) {
Array.isArray = function (arg) {
return Object.prototype.toString.call(arg) == '[object Array]';
};
}
Riferimenti
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray