Anzeige:
Ergebnis 1 bis 7 von 7

Thema: [JavaScript] Objekt/Variable referenzieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217

    [JavaScript] Objekt/Variable referenzieren

    Hallo,

    kann man in Javascript ein Objekt bzw eine Variable referenzieren?

    Also wie in PHP mit:

    Code:
    $a = & $b;
    Gruß

    nEox

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Was hast du damit vor?

    Normalerweise werden alle Objekte als Referenzen behandelt, wenn man sie an Funktionen weiterschiebt (im Gegensatz zu den "einfachen" Variablen wie z.B. Integers).

    so long,
    BlueJay

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217

    Mein Problem ist folgendes.... :)

    Hallo BlueJay,

    also, ich suche eine (bessere) Lösung für folgendes Problem:

    Code:
    function funcname_hide()
    {
    	// ausblenden
    }
    
    function funcname_show()
    {
    	// einblenden
    }
    
    
    function funcname(str_layer) // "constructor"
    {
    	this.obj_layer = getLayerRef(str_layer); // referenziert den Layer je nach Browser
    
    	/* zuweisen der Methoden */
    	this.hide  = funcname_hide;
    	this.show  = funcname_show;
    	
    	/* 
    	Das "Problem" ist, dass wenn ich einen Event 
    	fuer den Layer definiere. Ich würde gerne eine 
    	Methode des Objekts "funcname" aufrufen(z.B. this.hide()).
    	
    	Da der Browser aber beim Ausführen des Events nicht auf "this" 
    	zugreifen kann, habe ich es per Zuweisen auf ein globales
    	Objekt umgangen.
    	*/
    	
    	this.obj_searchForm.onkeydown = function hide_construct(e){ window.test.checkScroll(e); }
    	this.obj_searchForm.onkeyup   = function show_construct(){ window.test.search(); }
    	
    	window.test = this;
    	
    	/*
    	Das funktioniert auch soweit. Allerdings habe ich dann 
    	das Problem, dass wenn ich eine Variable des Objekts ändere, 
    	das diese Änderungen nicht übernommen werden.
    	
    	Wenn ich also das this-Objekt irgendwie referenzieren könnte
    	wär das ganze um einiges übersichtlicher.
    	
    	*/
    }
    
    myobj = funcname("layername");
    myobj.hide();
    Eine Lösung wäre den Namen des Objekts zu verwenden (in diesem Fall: myobj) - den müsste man dann auch für "this" nehmen.
    Allerdings wäre das Objekt dabei wesentlich abhängiger und auch nur einmal verwendbar.

    Deshalb wär so eine Referenz wie in PHP die beste Lösung. Hab aber per Google nichts brauchbares zum Thema gefunden.

    Gruß

    nEox

  4. #4
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von nEox
    Eine Lösung wäre den Namen des Objekts zu verwenden (in diesem Fall: myobj) - den müsste man dann auch für "this" nehmen.
    Hu? Der Sinn erschließt sich mir nicht so ganz.
    Du hast deinen Konstruktor (Schablone), da kannst du eigentlich erst mal nirgendwo zugreifen, sondern nur (Bau-)Elemente für dein Objekt definieren.

    Danach musst du dir sowieso erst mit Hilfe dieser Schablone die Objekte erzeugen:

    my_obj= new funcname("mein_layername");

    und diese reagieren dann in (hoffentlich) gewünschter Weise.

    Allerdings wäre das Objekt dabei wesentlich abhängiger und auch nur einmal verwendbar.
    Das mit der Abhängigkeit habe ich jetzt nicht kapiert. Und wieso nur einmal verwendbar? Oder brauchst du eventuell mehrere Objekte?
    Du kannst dir ja ohne weiteres ganze Arrays von Objekten aus der Schablone erstellen.

    so long,
    BlueJay

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo BlueJay,

    my_obj= new funcname("mein_layername");
    sorry, das "new" hab ich vergessen. War aber so gemeint


    Das mit der Abhängigkeit habe ich jetzt nicht kapiert. Und wieso nur einmal verwendbar? Oder brauchst du eventuell mehrere Objekte?
    Mh, gemeint habe ich das in etwa so:

    Code:
    function funcname(..)
    {
        // layer referenzieren
        ....
    
        // Verwendung eines globalen Objekts
        window.myobj.hide  = funcname_hide;
        window.myobj.show  = funcname_show;
    
        // ... dann kann man es einfach an den Event übergeben 
        window.myobj.obj_searchForm.onkeydown = function hide_construct(e){ window.myobj.hide(e); }
    }
    Das ist aber abhängig vom Namen des "globalen Objekts" und wenn ich das Objekt mehrmals erzeuge, überschreibe ich ja das globale Objekt.

    Mein Problem ist die Über- bzw. Weitergabe des Objekts, damit der Browser die gewünschte Funktion beim Event ausführen kann.

    Gruß

    nEox

  6. #6
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von nEox
    Code:
    ...
     // ... dann kann man es einfach an den Event übergeben
        window.myobj.obj_searchForm.onkeydown = function hide_construct(e){ window.myobj.hide(e); }
    Das ist aber abhängig vom Namen des "globalen Objekts" und wenn ich das Objekt mehrmals erzeuge, überschreibe ich ja das globale Objekt.
    Das mit den mehreren Objekten hatte ich so gemeint:
    Globales Objekt sei Layer[],
    Spezial-Layers von dir seien:

    Layer["Nummer1"],Layer["Nummer2"] u.s.w.
    und diese sollte das gewünschte Verhalten aufweisen.

    Wenn du andere (normale) Objekte erzeugst, sollten diese noch ihre Ursprungseigenschaften und functions haben. Da wird eigentlich nix überschrieben.

    Mein Problem ist die Über- bzw. Weitergabe des Objekts, damit der Browser die gewünschte Funktion beim Event ausführen kann.
    Wenn der Body-Teil noch nicht fertig geschrieben ist, kannst du deine Objekte mit document.write an die gewünschten Stellen einhängen, sonst musst du schauen, ob es ein "Mutterobjekt" gibt, was eine Einfüge-Funktion zur Verfügung stellt. Das node-Objekt ist da immer hilfreich.

    SelfHTML ist überarbeitet worden, ich rate dir, dich da umzuschauen.
    http://de.selfhtml.org/

    so long,
    BlueJay

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo BlueJay,

    ahhh, hab das mit den Array erst nicht ganz verstanden. Danke, das macht das Ganze um einiges übersichtlicher

    Gruß

    nEox

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •