Newsgroup: it.comp.lang.javascript
Titolo: Mi servirebbe un pò di teoria...

Ho questa situazione che sto cercado di capire meglio:
un file html contiene tra i tag <head> queste righe:
<script src="nomi.js" type="text/javascript"></script>
<script src="dati.js" type="text/javascript"></script>
<script src="funzioni.js" type="text/javascript"></script>
il file NOMI.js contiene un lunghissimo elenco di questo tipo:
abc3="tizio caio"
abc4="nome sempronio"
abc5="altro nome
abc8="nuovo nome"
...
PRIMA DOMANDA:
ma abcX è una variabile? (il file non definisce nessuna variabile 
esplicitamente)
proseguendo il file DATI.js contiene,definisce un'array così:
var arrUtente=new Array()
a=arrUtente
a[1]=new U(x,x,abc3,x,x,x,x,x,x,x)
a[2]=new U(x,x,abc4,x,x,x,x,x,x,x)
a[3]=new U(x,x,abc80,x,x,x,x,x,x,x)
il file FUNZIONI.s contiente una funzione
function U (1val, 2val, TERZO, 4val,..... etc)
this.TERZO = TERZO
Questo è il quadro.
Nel file html c'è poi un richiamo alla funzione U che stampa i dati.
SECONDA DOMANDA:
praticamente quando stampo arrUtente[i].TERZO che corrisponde alla 3a 
colonna della riga iesima dell'array arrUtente e cioè a "abcX" questo mi 
stampa subito il nome associato a quella variabile (?) dal file NOMI.js. Ho 
reso l'idea?
Cioè l'associazione viene fatta in automatico per la sola presenza di quel 
file nomi tra i tag <head>
E come potrei fare, se è possibile, a far stampare ANCHE il NOME di questa 
pseudo variabile e cioè "abcX"?
Grazia in anticipo a chi mi aiuterà a schiarire le idee in proposito. 

 pseudo variabile e cioè "abcX"?
Non lo fai se ho capito cosa intendi. Dal valore non puoi risalire al
nome della variabile.
Nel tuo specifico caso, visto che le variabili "abcX" sono globali, e
sono quindi considerate proprietà di "window", potresti anche iterare
tutte le sue proprietà finché non ne trovi una con il valore che stai
cercando; ma non è proprio una gran cosa. E inoltre vi possono essere
più variabili aventi lo stesso valore, e anche lo stesso riferimento,
volendo. Magari non è il tuo caso, però è bene farlo notare.
C'è anche da dire che non capisco come mai usare diverse variabili di
quel tipo, invece che un array.
-- 
~ "L'amore è la risposta.
Ma mentre aspetti la risposta,
il sesso fa nascere alcune buone domande."
(Woody Allen)

 
http://msdn2.microsoft.com/en-us/library/hbxc2t98.aspx
per curiosita', te lo sei salvato da qualche parte e fai un bel copia
incolla o tutte le volte riscrivi tutto prendendoti i link dai vari
bookmark?  :)

 cercando; ma non è proprio una gran cosa.
Quindi questo sarebbe l'unico modo di "stampare" il nome di quella variabile 
globale, giusto?
Ok. Grazie tante ancora.

 bookmark?  :)
Nessuna delle due: approfitto di una caratteristica che il newsreader
che uso mi mette a disposizione. E dato che lo usi anche te, dovresti
conoscerla, o quanto meno dovrebbe essere facile per te arrivarci. :)
-- 
~ Confondi il mondo, sorridi tutti i lunedě!

 globale, giusto?
Te l'ho detto, dipende! Se da un "valore/riferimento", vuoi risalire
al nome della variabile ad esso relazionata, potresti fare così.
Ma non sempre lo puoi fare e non è comunque formalmente corretto. Mi
spiego con un esempio:
<script type="text/javascript">
	var a,b,c,d;
	a = b = c = d = new Array(1,2,3);
</script>
Tutte e quattro le variabili, si riferiscono alla stessa istanza. Se
quindi da quest'ultima volessi risalire al nome della variabile, non
ve n'è di certo uno un'univoco.
-- 
~ ..ma in effetti il  concetto di WYSIWYG (quello che vedi è quello
che ottieni) si applica ai computer malissimo, così  come si applica
alle  donne... (The  Real Programmer)

 globale, giusto?
Te l'ho detto, dipende! Se da un "valore/riferimento", vuoi risalire
al nome della variabile ad esso relazionata, potresti fare così.
Ma non sempre lo puoi fare e non è comunque formalmente corretto. Mi
spiego con un esempio:
<script type="text/javascript">
	var a,b,c,d;
	a = b = c = d = new Array(1,2,3);
</script>
Tutte e quattro le variabili, si riferiscono alla stessa istanza. Se
quindi da quest'ultima volessi risalire al nome della variabile, non
ne troverei di certo uno univoco.


 ne troverei di certo uno univoco
Ok, non ricado in questo caso. Nel mio "progetto" sono sicuro che è unica.
Credo che iterando ce la dovrei fare.
Adesso devo solo capire come iterare :-))


 conoscerla, o quanto meno dovrebbe essere facile per te arrivarci. :)
ah bello,
in effetti 40tude, che mi è stato imposto a lavoro, è un nr niente male e
mi sono sempre accorto di averlo sfruttato al di sotto delle sue
possibilità  :)
ma se mi devo mettere a studiare anche quello...  :(

 Adesso devo solo capire come iterare :-))
Con il for..in. Puoi trovare maggiori informazioni negli archivi del
NG, così come nelle reference che ti ho dato. Ma il concetto sarà:
	function getGlobalNameFromValue( v ){
		for (var key in window ){
			if ( window[key] == v )
				return key;
		}
		return null;
	}
In modo molto spartano.
Ma ripeto, non è esattamente una buona pratica fare in questo modo.
-- 
~  "FINARMENTE  LI SFRATTATI AVRANNO UN TETTO SULLA  TESTA!
 ...però tirato ammodino, un  tegolo pe' vorta.." (Il vernacoliere)

 ma se mi devo mettere a studiare anche quello...  :(
Prrrr... Pigrone! :P
-- 
~ "Lo  dice il  buon senso, ma il buon senso non è uno  standard".
(Jeffrey Zeldman)

 Prrrr... Pigrone! :P
e sti caxxi :)

 e sti caxxi :)
Un programmatore dovrebbe essere innanzitutto uno studioso. :)
-- 
~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)


Ho fatto diverse prove e letto molto ma non riesco a cavare un ragno dal 
buco.
Domanda:
ma se io scrivo qualcosa tipo:
document.write(window[lenght])
in qualsiasi parte del documento di cui sopra, non dovrei ottenere, in 
risposta, un numero indicante il tot di variabili globali? 

 risposta, un numero indicante il tot di variabili globali?
Eh no. Si vede che le letture che hai fatto non sono state fruttuose.
Premesso che è "length" e non "lenght", con quel codice recuperi solo
il valore di un'ipotetica variabile con nome pari al numero di frames
contenuti nella finestra corrente.
Cerco di spiegarti meglio la square bracket notation con un'esempio:
<script type="text/javascript">	
	var 	Hiro 	= "Nakamura",
		Peter	= "Petrelli",
		aNumber	= 7;
	alert( window.Hiro )
	/*
		visualizza "Nakamura", in quanto le variabili globali
		sono considerate a mo' di proprietà di "window"
	*/
	alert( window["Hiro"] );
	/*
		visualizza lo stesso risultato di prima.
		Qui però è stata usata la "square bracket notation" e
		difatti il nome della proprietà è una stringa.
	*/
 
	var who = "Peter";
	alert(window[who]);
	/*
		visualizza "Petrelli"
	*/
 
	who = "Hiro";
	alert(window[who]);
	/*
		visualizza "Nakamura"
	*/
</script>
In pratica, usando la "square bracket notation", puoi passare il nome
della proprietà di cui vuoi il valore come stringa. Così facendo, hai
la possibilità di impostare il nome a run-time, cosa che non potresti
fare con la "dot notation" (window.Hiro).
Il ciclo "for..in" ti itera le proprietà di un oggetto, restituendoti
il nome di queste:
	var myobj = new Object();
	myobj.myprop = 123;
	for (var prop in myobj)
		alert(prop) // "myprop"
E quindi, grazie alla square bracket notation, puoi anche ottenere il
valore, pur non conoscendone il nome a priori:
	for (var prop in myobj)
		alert(prop+"="+myobj[prop]) // "myprop=123"


 aNumber = 7;
Te guardi troppa TV :-))))
Sto ancora rileggendo quello che mi hai scritto, nel fine settimana lo 
digerirņ, spero...
Nel frattempo sto cercando di aggirare il problema passando da un'altra 
strada e mi rifaccio hai costruttori di cui mi parlavi nella prima risposta.
Ho definito quest'array:
var arrFoto=new Array()
a=arrFoto
a[1]=new Ft(3,"Paperino")
a[2]=new Ft(4,"Pluto")
poi ho definito anche questo "costruttore":
function Ft(FCod,Nome) {
 this.FCod = FCod;
 this.Nome = Nome;
}
li ho messi in un file prova.js che ho richiamato nell'header di un file 
.htm
Perchč se, nel file dal quale li richiamo scrivo qualcosa tipo
document.write(arrFotoA[1].FCod)
mi da un errore "Ft" non definito?!?!
Questo proprio non lo capisco! :-(
P.s.: Grazie dell'aiuto...
P.s.2: Hiro doppiato in italiano perde tutto il suo fascino ;-)

 mi da un errore "Ft" non definito?!?!
vedi sopra: in che punto lo stai scrivendo? l'array è già stato creato con
successo? quando definisci l'array, quando la FT e quando metto il
document.write? la sequenza è importante: prima FT, poi array, poi
document.write ...
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 ha scritto nel messaggio 
news:wga0mwik2xbf.h...@40tude.net...

Era effettivamente una questione di ordine.
Grazie tante. 

 obbligatorio, mai testato, lo metto di default)
Non è obbligatorio, anzi. La maggior parte delle volte è senza senso.
Lo utilizzo quando voglio sottolineare che una determinata funzione è
un costruttore; oppure se può ritornare un'istanza differente.
-- 
~ Tutti quelli che credono nella psicocinesi,
per favore alzino la mia mano.

 P.s.2: Hiro doppiato in italiano perde tutto il suo fascino ;-)
Difatti io lo adoro solo quando parla in japponese. ;)
Mi hanno detto la stessa cosa di Mohinder, comunque.
-- 
~ "Io rispetto molto la stupiditą umana.
E' la sola cosa che mi dia un'idea dell'eternitą."
(Voltaire)

 Mi hanno detto la stessa cosa di Mohinder, comunque.
Non lo so... avendola vista in lingua originale non la sto seguendo... ho 
solo visto qualche scena... e comunque... l'assassino è il maggiordomo :-))