'byref' parameters

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
In vb.net heb je 'byref' parameters die als je ze aanpast in een functie/procedure, ook erbuiten worden aangepast. Is het mogelijk om dit bij js te doen?

Alvast bedankt :)
 
In js los je zoiets op door een globale variabele aan te maken. Dat is een variabele die je buiten een functie declareert. Zo kan elke functie er wel nog steeds aan, behalve wanneer je binnen een functie een variabele met dezelfde naam declareert.
 
Ok, ik hoopte dat het mogelijk was in js :(
 
Iets als:
PHP:
<script type="text/javascript">

 var a = 1;

 function foo(x,y) {
  eval(x + ' += y');
  };

 foo('a',2);

 alert(a); // 3!

</script>
zou nog kunnen. :)


Vr.Gr. Egel.
 
:shocked: Je blijft me verbazen Egel. Als ik niet beter wist zou ik zeggen dat jij js ontwikkeld had :D

Ik ga het zometeen eens toepassen op mijn probleem, als het werkt spaart het me toch net wat code uit :)
 
Ok, werkt perfect :)

Ik heb wel een klein probleem met het aanroepen van een dergelijke functie in een andere funcie. Dat werkt niet, tenzij ik er een copie van in die functie plaats, wat nogal omslachtig is :(

Is er een manier om een dergelijke functie zowel in als uit andere functies te grbuiken?
Alvast bedankt :D
 
Dan moet je even een voorbeeld geven,
PHP:
<script type="text/javascript">

 var b = 5;

 function foo(x,y) {
  eval(x + ' += y');
  };

 function ff(s,n) {
  foo(s,n);
  };

 ff('b',3);  

 alert(b); // 8!

</script>
lukt wel, dus ik denk dat het dan nog ergens anders fout gaat. :)

P.s.
Is het niet mogelijk een array te gebruiken? Bv.:
PHP:
<script type="text/javascript">

 var c = new Array(0,1,2,3);

 function cc(x,y) {
  c[x] += y;
  };

 cc(2,1);  
 cc(3,2);  

 alert(c); // 0,1,3,5!

</script>
Objecten zijn ook zo te benaderen, zoals hier:
http://www.helpmij.nl/forum/showpost.php?p=2396646&postcount=7 :)


Vr.Gr. Egel.
 
Mijn code comt meer hiermee overeen.

Code:
<script type="text/javascript">
 function foo(x,y) {
  eval(x + ' += y');
  };

 function ff(s,n) {
  var b = 5;
  foo('b',2);
  alert(b); // 5 ipv 7 :(
  };
</script>

verschil met jouw code is dus dat b niet 'globaal' is gedeclareerd, of hoe je dat oojk noemt bij JS. Ik neem aan dat daar wijnig aan te doen is, ofwel?
 
Daar is weinig aan te doen inderdaad. Als b een lokale variabele is (met var ervoor) dan moet de functie ook lokaal zijn. :confused:

Met prototype is nog wel wat te doen maar dat werkt niet rechtstreeks op een variabele. In plaats daarvan gebruik je een object en voeg je een methode toe die iets met de eigenschappen van dat object doet. In dit geval het object userNumber met de eigenschap value :
PHP:
<script type="text/javascript">

 function userNumber(x) {
  this.value = x;
  };

 userNumber.prototype.adding = function(n) { this.value += n;};

 var x = new userNumber(4);

 x.adding(3);

 alert(x.value); // 7!

</script>
Maar met x.value kun je vervolgens wel alles doen dat je normaal met het getal x zou doen. :)


Vr.Gr. Egel.
 
Laatst bewerkt:
Ok, ty voor de help, vraag opgelost :thumb:

Egel, waar heb jij JS geleerd? xD
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan