Newsgroup: it.comp.lang.javascript
Titolo: Programmazione OO in JS + xmlHttpRequest

Salve,
non sono espertissimo di JS. Finora l'ho usato per cambiare qualche
proprieta` dei tag o per prendere valori dai form, sempre usando funzioni.
Vorrei chiedervi quindi se si puo` programmare a oggetti in JS, e dove
trovare informazioni.
La mia intenzione sarebbe di istanziare un oggetto al click su un link,
che crea una connessione al server con xmlHttpRequest, ma mantiene uno
stato. Il gestore di statechange sarebbe un metodo dell'oggetto, e
l'istanza di xmlHttpRequest una proprieta`. In questo modo non sarei
costretto a mandare avanti e indietro variabili che comunque servono al
client e non al server.
Se avete un link dove documentarmi su questo particolare utilizzo sarebbe
perfetto. Purtroppo con Google non ho trovato niente.
Grazie.
Bye.

 Bye.
de nada.
rae

 stato.
Ricordati cmq che la vita di javascript inzia e si esaurisce con la pagina.
Nel momento in cui questa viene "scaricata" dalla memoria (reload,
abbandono, chiusura del browser) i riferimenti vengono distrutti.
-- 
~ Un computer e' fondamentalmente stupido.
Non fa cio' che vuoi che faccia, ma cio' che gli dici di fare.

 trovare informazioni.
Si', certo che si puo' e, non me ne voglia raenkrus, non c'e' bisogno di 
simulare alcunche'.
Potresti partire da qui:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide#Details_of_the_Object_Model
per poi passare alla relativa reference:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference
Altrimenti le prime due ricerche che ho provato a fare con google:
http://tinyurl.com/y8btc3
http://tinyurl.com/se589
Solo fai attenzione: spesso e volentieri trovi in giro molti e troppi 
script fatti da chi cerca di simulare l'ereditarieta' a classi come 
quella di java (da questa abitudine suppongo venga il "simulare" di 
raenkrus).
A me e' un approccio che decisamente non piace: javascript e' basato sui 
prototipi e tanto vale sfruttare le sue caratteristiche.
Soprattutto agli inizi sarebbe meglio comprendere lo strumento che si 
usa invece di stravolgerlo...

 simulare alcunche'.
Grazie a tutti e tre, mi sono fatto un'idea abbastanza chiara, anche se
devo approfondire.
Riporto qui il codice (a grandi linee), visto che con xmlHttpRequest c'e`
una rognetta e potrebbe cascarci qualcun'altro. :)
In pratica bisogna usare una "closure", una funzione senza nome, per la
callback, per passargli l'oggetto stesso, altrimenti lo perde.
function Cat(cat)
{
 
this.cat
 = cat;
	this.xmlHttp = createXmlHttpRequestObject();
	var _this = this;
 
	this.expand_cat = function()
	{
		if (this.xmlHttp) {
			this.xmlHttp.open("GET", "script.php?parametri", true);
			this.xmlHttp.onreadystatechange = function(req) {
				_this.handle_expand_cat(req);
			}
			this.xmlHttp.send(null);
		}
		// alert(this.xmlHttp);
	}
 
	this.handle_expand_cat = function()
	{
		// when readyState is 4, we read the server response if
		(this.xmlHttp.readyState == 4) {
			// continue only if HTTP status is "OK" if (this.xmlHttp.status == 200)
			{
				try {
					// read the response from the server
					var response = this.xmlHttp.responseText; //
					...
 
				} catch(e) {
					// display error message
					alert(e.toString());
				}
			} else {
				// display error message
				alert(xmlHttp.statusText);
			}
		}
	}
} // Object Cat

 In pratica bisogna usare una "closure", una funzione senza nome, 
Una "closure" non è una funzione senza nome, non fraintendiamo. E'
semplicemente una funzione creata dentro lo scope di un'altra funzione. Può
anche avere un nome, o essere anonima, è indifferente.
In ogni caso stai attento alle closure. Io cerco di evitarle il più
possibile, perché spesso generano memory leak. IE6, ad esempio, è il re in
questo.
-- 
~ Se potete leggere questo, la mia donna è caduta.
(Letta sul retro di una maglietta di un motociclista)