JavaScript: novità in ECMAScript 5

JavaScript: novità in ECMAScript 5

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

Torna su