Variablen von einer Funktion in eine andere

Hai, Leute,

ich würde gerne mehrere Funktionen schreiben, die wiederum von anderen Funktionen aufgerufen werden. Dazu muß ich die entsprechenden Variablen von einer Funktion an die andere übergeben, handelt sich bei den Variablen-Inhalten um Zahlen, geht’s problemlos, enthalten sie aber Objekte, zickt’s rum. Also:

function zeigmich(obj)
blabla

function schiebmich(obj, ziel)
verschiebe obj nach ziel

function reindraengel(obj1, obj2, obj3)
ziel = höhe von obj1 + höhe von obj2
schiebmich(obj3, ziel)
zeigmich(obj2)

blabla
blabla

„ziel“ wird anstandslos weitergegeben, aber Objekte gehen irgendwie unterwegs verloren, kann man die Namen der Objekte irgendwie in Text umwandeln, den weitergeben und dann wieder als Objekt verwenden, oder so? Globale Variablen möchte ich möglichst vermeiden…

Gruß
Sibylle

Ob Zahl oder Objekt spielt keine Rolle, denn JavaScript ist ohnehin immer wie Java Referenz-orientiert und nicht Instanz-Orientiert wie bei C++ meinetwegen. Der Fehler muss an anderer Stelle bei Dir liegen, z.b. dass Du vielleicht Properties irgend einer Instanz eines Prototypen nimmst, die nicht oder noch nicht verfuegbar sind.

Wenn Du eine Zahl uebergibst, dann ist es immer nicht als eine Referenz und somit nichts anderes als wenn Du ein Objekt an eine Funktion uebergibst, was auch nur by reference und nicht by value angelegt wird.

kann kein grundlegendes problem sein…
poste doch mal deinen code, wenn er nciht zu komplex ist…

//konstruktor
function bar(arg1)
{
this.name = arg1;
this.meldeDich = new Function(„alert(‚it s „+this.name+“‘)“);
}

&lt:stuck_out_tongue_winking_eye:RE>
//create
foo = new bar(‚the great foo‘);

//wrapper
function showFoo(obj)
{
//call method of object-reference…
obj.meldeDich();
}

//wrappers call
showFoo(foo);

Dank Dir für die Antwort, dog.je,

kannst Du auch nochmal in meine Antwort an Vir2eller schauen?

Gruß
Sibylle

Hai, Vir2allender,

scheinbar liegt der Fehler schon wieder am TimeOut-Aufruf

function scrollen(obj, ziel)
{
var y = parseInt(obj.style.top);
if(y

Hallo,

als das mit den Globalitaeten und so ist natuerlich nur die halbe Wahrheit. Die genaue Begruendung liegt im Detail!

Wenn man argumentiert, dass das nur dann geht, wenn G\_obj eine globale Variable ist, dann kann man die Begruendung genauso gut fuer ziel anwenden, oder etwas nicht!?

G\_obj = obj;
setTimeout('scrollen(G\_obj, ' +ziel+ ')', 3000);

setTimeout() ist eine Funktion, die zwei Argumente annimmt.
Die Parameter sind vom Typ string und vom Typ number.

setTimeout(string,number);

'scrollen(G\_obj, ' stellt nicht anderes da als ein String-Literal und G\_obj sagt in diesem Kontext nichts anderes aus als ein paar Zeichen, die erst bei Aufruf wieder als object interpretiert werden muessen.

Auf der anderen Seite macht auch:

setTimeout('scrollen(' +obj+ ', ' +ziel+ ')', 30);

keinen Sinn, denn was soll string + object + string +... sein?
So einen gescheiten Operator gibt es nicht in JS!

Ich empfehle da eher reine String-Concatination:

function scrollen(obj, ziel)
{
 if(ie) {
 var styleObj = window.document.all[obj].style;

 var y = parseInt(styleObj.top);
 if (y 
1 „Gefällt mir“

Hi.

Wenn man argumentiert, dass das nur dann geht, wenn G_obj eine
globale Variable ist, dann kann man die Begruendung genauso
gut fuer ziel anwenden, oder etwas nicht!?

G_obj = obj;
setTimeout('scrollen(G_obj, ’ +ziel+ ‚)‘, 3000);

Das funktioniert, weil die Zahl, die in Ziel steht in einen String gewandelt wird und dann übergeben wird. Dabei wird also nicht mehr auf eine Variable zugegriffen. Das Objekt lässt sich aber nicht in einen String wandeln. Beim Aufruf der Routine wird der String, der übergeben wird, wieder in eine Zahl gewandelt, wenn damit gerechnet wird, da die Umwandlung zwischen Strings und Numbers ja vollkommen transparent erfolgt. Mit Objekten ist dies nicht möglich. Also übergibt man entweder ein globales Objekt, oder man übergibt den Namen des Objektes als String, wozu man das Objekt allerdings auch global benötigt, da sonst der Name ja ein nicht mehr existentes Objekt bezeichnet.

CU,
Sebastian.

1 „Gefällt mir“

Jeschafft! Danke o.T.

kapiert Danke o.T.