1. L'oggetto XMLHttpRequest

Ereditarietà in JavaScript

Non è obbiettivo di questo tutorial trattare con approfondimento l'ereditarietà, che vedremo in comunque in poche righe in modo da rendervi capaci di seguire il tutorial senza problemi.

In JavaScript non esiste un vero e proprio supporto per l'ereditarietà, per poter sfruttare quindi questa opzione ci serviremo dell'oggetto prototype.
Ci basta sapere che tutti i metodi e gli attributi che assegneremo a prototype, saranno disponibili anche agli altri attributi e ai metodi della classe istanziati attraverso il costruttore.

Per creare quindi una classe Figlio che eredita da un'ipotetica classe Padre, è sufficiente utilizzare questa metodologia:

function Padre() {}
Padre.prototype.funzione_padre = function()
{
	alert("ciao");
}

function Figlio()
{
	this.funzione_padre();
}

Figlio.prototype = new Padre();
Figlio.prototype.constructor = Figlio;

Se ora creiamo un'istanza della classe Figlio, questa farà partire l'alert mandando in video la stringa "ciao".

Il costruttore di AjaxModule

Il costruttore della classe AjaxModule non contiene istruzioni.
Lo dichiariamo semplicemente per permettere a JavaScript di creare le istanze.

Di seguito il codice del costruttore. E' sufficiente creare una funzione qualunque e utilizzare poi l'operatore new per creare un'istanza della classe.

function AjaxModule() {}

L'oggetto XMLHttpRequest

Il primo vero metodo che andiamo a vedere è createXMLHttpRequest.
Attraverso questo metodo garantiamo la compatibilità con tutti i browser attualmente in uso dall'utenza media e non, comprese le vecchie versione di Internet Explorer, che esattamente come le nuove (Internet Explorer 7 e 8) non seguono affatto gli standard consigliati dal consorzio internazionale e ci obbligano a ricorrere agli ActiveX per creare il nostro oggetto XMLHttpRequest
(si nota il sarcasmo?)

Ora vediamo il codice del suddetto metodo:

AjaxModule.prototype.createXMLHttpRequest = function()
{
	if (typeof XMLHttpRequest != "undefined")
	{ return new XMLHttpRequest(); }
	else if (window.ActiveXObject)
	{
		var versioni_IE = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "Microsoft.XMLHttp"];
		
		for (var i in versioni_IE)
		{
			try
			{
				var xmlobj = new ActiveXObject(versioni_IE[i]);
				return xmlobj;
			} catch (e) {}
		}
	}

	throw new Error("Impossibile inizializzare l'oggetto XMLHttp.");
}

Nella prima IF controlliamo che il tipo di dato XMLHttpRequest esista, ed è il caso di Firefox, Opera, Chrome, Safari e tutti gli altri.

Nella ELSE corrispondente invece ho racchiuso il codice per Internet Explorer.
Con l'uscita delle versioni successive di Internet Explorer, anche l'ActiveX corrispondente ci obbliga ad utilizzare una dicitura diversa per la creazione del medesimo oggetto.

Nell'array versioni_IE ho riportato le versioni ActiveX in ordine cronologico a partire dalla più recente.
In questo modo nella FOR ci serviamo del costrutto TRY e CATCH per "tentare" la creazione dell'oggetto in questione. In caso di fallimento il CATCH non esegue alcuna istruzione e passa all'iterazione successiva della FOR per provare con un ActiveX più vecchio.