Newsgroup: it.comp.lang.javascript
Titolo: Passaggio valori e funzioni...

Ragazzi scusate ma ho bisogno di un aiuto...
C'č modo di passare ad una funzione una variabile per riferimento?
Mi spiego meglio...
In una pagina html ho incluso un file js con il codice...
in questo file c'č una funzione simile:
function Pippo(valore)
{
    valore=1;
}
nella pagina html c'č un codice simile:
<script language="javascript">
function Pluto()
{
    var prova;
    Pippo(prova);
    alert(prova);
}
</script>
tutto questo non dovrebbe visualizzare un alert con valore 1?
Perchč invece restituisce undefined?
Grazie a tutti...
-- 
Omar "Bromarock" Damiani
http://www.omardamiani.it
"Alla fine, non ricorderemo le parole dei nostri nemici, ma i silenzi dei
nostri amici".
Martin Luther King Jr.

 Perchč invece restituisce undefined?
Perche' tu hai dichiarato una variabile "prova" *locale* alla funzione
"Pluto", ma senza specificarne il contenuto.
Alla funzione "Pippo" tu stai passando il *valore* di "prova" (che non
essendo definita, e' appunto "undefined"), quindi il successivo alert ti
mostra il contenuto di "prova" che, non essendo mai mutato (ti ricordo che
a Pippo hai passato il valore, non il riferimento), ti restituisce
"undefined".
-- 
ZER0://coder.gfxer.web-designer/
~ Tutti quelli che credono nella psicocinesi, per favore alzino la mia
mano.


Ok...ora ho capito il perchè di undefined, ma non ho risolto il cambiamento
di valore :-((
Help!!!

 Grazie a tutti...
il passaggio per riferimento avviene solo con variabili di tipo Object.
Quello che vuoi fare tu in modo "procedurale" lo puoi ottenere benissimo
con una funzione:
function pluto(valore)
{
    return 1;
}
var valore;
valore = pluto(valore);
alert(valore);
-- 
artemis::alpeia


Eh...lo so, ma in realtà qst è un esempio molto semplificato rispetto al
codice che ho io...e i parametri sono 2, quindi non posso usare return...
Azz...ma non c'è qualcosa tipo in C (& e %), no?

Soluzione quasi-oop:
<script>
function mia_struct()
{
this.valore1=0;
this.valore2=0;
}
function pippo(valori)
{
 valori.valore1=2;
 valori.valore2=4;
 return valori;
}
function Pluto()
{
    var prova=new mia_struct();
    pippo(prova);
    alert(prova.valore1 + " " + prova.valore2);
}
</script>
Soluzione oop:
<script>
function mia_struct()
{
this.valore1=0;
this.valore2=0;
this.pippo=pippo;
}
function pippo()
{
 this.valore1=2;
 this.valore2=4;
}
function Pluto()
{
    var prova=new mia_struct();
    prova.pippo();
    alert(prova.valore1 + " " + prova.valore2);
}
</script>
Alex.
-- 
___________________________________________________________
a p bertolini
(
www.webwarrior.org
)

N.B. l'uso delle maiuscole è completamente sbagliato.
Teoricamente mia_struct è un oggetto e quindi dovrebbe essere Mia_struct,
mentre Pluto è un metodo e va con la minuscola: pluto()
Giusto per pignoleria


Ho appena risolto anch'io in questo modo...
Grazie varemente a tutti...veramente un ottimo ng ;-)))

 di valore :-((
Questo e' un generico esempio con array, per non complicarti troppo la
vita:
/* ARRAY - ESEMPIO - passaggio per riferimento */
function Pippo(values){
	values[0]=2;
	values[1]=4;
}
var myvalues=[] /* dichiari un array vuoto */
alert(myvalues);
Pippo(myvalues);
alert(myvalues);
/* ARRAY - ESEMPIO - come valore di ritorno */
function Pippo(){
	return [2,4];
}
var myvalues=Pippo();
alert(myvalues);
/* OBJECT - ESEMPIO - passaggio per riferimento */
function Pippo(coords){
	coords.x=10;
	coords.y=23;
}
/* creo un oggetto con due proprieta', x e y, impostate a 0 */
var mycoords={x:0,y:0};
alert(mycoords.x +"x"+mycoords.y);
Pippo(mycoords);
alert(mycoords.x +"x"+mycoords.y);
/* OBJECT - ESEMPIO - come valore di ritorno */
function Pippo(){
	return {x:10,y:23};
}
var mycoords=Pippo();
alert(mycoords.x +"x"+mycoords.y);
Non mi spingo troppo avanti perche' non conosco la tua conoscenza in merito
a Javascript o alla OOP, e vorrei evitare di mettere piu' carne al fuoco di
quanto gia' non abbia fatto.
-- 
ZER0://coder.gfxer.web-designer/
~ Plagiarism is copying from one source;
research is copying from two or more
(Wilson Mizner)

 Azz...ma non c'è qualcosa tipo in C (& e %), no?
Se devi fare un riferimento, fallo con Java e non con C.
In Javascript non ci sono puntatori.
-- 
ZER0://coder.gfxer.web-designer/
~ Deformazione professionale è:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

 In Javascript non ci sono puntatori.
grazie al cielo, aggiungerei


 grazie al cielo, aggiungerei
In questo caso, concordo. Dato che se ci fossero puntatori per un
linguaggio di scripting, il cui contesto e' il *web* e che viene
comunemente usato anche da chi non ci chiappa una mazza, sarebbe una
sciagura di dimensioni apocalittiche.
-- 
ZER0://coder.gfxer.web-designer/
~ Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno
fumato una sigaretta.

 sciagura di dimensioni apocalittiche.
non oso immaginarlo... :)
-- 
artemis.alpeia();

non oso immaginarlo... :)
Ci pensa gia' da solo IE ogni tanto ad andare in GPF, e' inutile
aggiungere la possibilita' anche da Javascript di ottenere quel
risultato :-)
'bye

 risultato :-)
Fosse solo IE...d'altronde IE==win9x==win2x==GPF, è una relazione
assiomatica, come 1==1, non dimostrabile ma alla base di tutta
l'informatica!
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.
--

 ha scritto nel messaggio
news:2iirjkF...@uni-berlin.de...
