Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16
  1. #1
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    hallo

    ich bastel grade an einer kleinen Klasse in JS. Dabei will ich private und öffentliche Eigenschaften und Methoden haben. Hab mich dabei an dieses Tutorial gehalten.

    ich habe in dieser Klasse (oben geposteter Link) Events überladen bzw. diesen Events Funktionen zugewiesen.

    PHP-Code:
    //    Mausevents
    //    this an Variable übergeben, um sicherzustellen, dass in den Funktionen
    //    das richtige Objekt angesprochen wird. Ohne dies zeigt this auf HTML Document
    var tmpThis this;
    document.onmousedown =    function( action )
                {
                    
    tmpThis.MousePosDownaction );
                }
    document.onmousemove =    function( action )
                {
                    
    tmpThis.Resizeaction );
                }
    document.onmouseup =    function()
                {
                    
    tmpThis.DenyResize();
                } 
    Ist zwar JS und kein PHP, aber ahuptsache da ist etwas Syntax-Highlighting bei.

    Diese Funktionen sollen nun nicht mehr öffentlich sein d.h. sie sollen nicht mit this.NAME = function() deklariert sein sondern mit function NAME(). Dann sind sie nur innerhalb der Klasse sichtbar. Nun weiß ich aber nicht, wie ich diesen Events die Funktionen dann zuweise. Schließlich muss dort auch eine Kopie von this mitgegeben werden um auf die Membervariablen zugreifen zu können. Dann bekomme ich aber die Fehlermeldung "tmpThis has no properties", wenn ich dies einfach als Parameter mache.

    Kompletten Quelltext des Javascriptes einsehen
    Geändert von ray_ray (07-11-2005 um 14:36 Uhr)

  2. #2
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    sprichst du von onmouse....?
    Das sind keine funktionen, sondern lediglich Attribute, die im Falle eines Eventes abgefragt werden und wenn dort eine Funktionsreferenz steht, wird diese ausgeführt.

    Du hast auf das verhalten keinen Einfluss, genauso wenig wie du ein Attribut lokal deklarieren kannst, ein Attribut ist immer global verfügbar.

  3. #3
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    mit öffentlich meine ich das verhalten innerhamb udn außerhalb meiner klasse (nicht pepostet, aber verlinkt). öffentlich = public, nicht öffentlich = private.

    nun möchte ich, dass die funktionen, welche ich den jeweiligen events hinterlegt habe (siehe quelltextauszug), nicht mehr öffentlich zugänglich sind. um dann aber auf die membervariablen der klasse zugreifen zu können brauche ich einen (this-) zeiger, der auf die klasse zeigt. könnte ihn ja als übergabeparameter machen, jedoch komtm dann imemr die fehlermeldung action has no properties, weil dann ja auch die action übergeben werden müsste, wenn ich andere werte übergebe. wie ich das dann hinbekomme einen passenden zeiger in die funktionen zu bekommen weiß ich nicht.

  4. #4
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events


  5. #5
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Zum Teil.

    Das Problem ist ja nicht, dass ich nicht weiß, wie ich etwas private oder public mache, sondern wie ich es hinbekomme bei dem ganz oben geposteten Quellcode den Funktionen wenn sie dann private sind einen this-Zeiger zu übergeben.

    Im moment sind die Methoden noch so implementiert:
    PHP-Code:
    this.MousePosDownaction ); 
    Ich möchte (bzw muss wegen der Aufgabenstellung) sie aber so haben
    PHP-Code:
    function MousePosDownaction ); 
    Dann sind sie nur der Klasse zugänglich in der sie auch implementiert sind. Allerdings ist dann der this-Zeiger nicht mehr korrekt sodass ich eine Variable mit dem Zeiger übergeben müsste. An sich nicht so schwer. Problematisch wird das erst in verbindung mit action. Der Parameter wird vom Browser irgendwie in Abhänigkeit des Events bereitsgestellt (weiß nicht genau wie. Hab ich aus nem Tutorial oder so). Wenn ich nun noch eine Variable für einen "temporären" this-Zeiger mit übergebe bekomme ich immer die Fehlermeldung "action has no properties". also muss ich irgendwie anders an den this-Zeiger oder an die action kommen. Der this-Zeiger der ohne eine Übergabe des gültigen Zeigers in der FUnktion vorhanden ist zeigt auf HTML Document udn nicht auf mein Object.

  6. #6
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Deine action Variabel ist der Event, der wird der Funktion on[Event] übergeben, das kannst du nicht ändern. D.h. wenn du onload = function(e) {} irgendwo definierst ist das e vorher bestimmt und nicht von dir beeinflußbar. Und genausowenig das this in der Funktion, das ist immer das Element das den event aufruft. Daher stimmt das this nicht mit deinem in der Funktionsdeklaration überein.

    Jetzt hast du das:
    PHP-Code:
    var tmpThis this;
    document.onmousedown =    function( action )
                {
                    
    tmpThis.MousePosDownaction );
                } 
    In der Mousedownfunktion ist this = document.

    und das steht damit in keiner Verbindung:
    PHP-Code:
    function MousePosDownaction ); 
    Da fehlt das Objekt, dass du der Funktion oben übergibst (nämlich tmpThis) von dem weiß die zweite Funktion nichts.

  7. #7
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    soweit ist mir das ja ach klar. die frage ist nur wie bekomme ich nun das this darein?

  8. #8
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Du meinst in der Funktion MousePosDown( action )?
    Entweder mit einem zusätzlichen Parameter. Oder du fügst dem action Objekt this als Eigenschaft zu.

    Es kommt darauf an was du wirklich machen willst, so ganz verstehe ich dein Ziel nicht. Den event Parameter kannst du nicht erzeugen, dass heißt den Bekommst du nur dort, wo der Event aufgerufen wird. this ist nur innerhalb des aktuellen Objektes gültig, d.h. diesen Parameter hast du nicht im Eventaufruf.

  9. #9
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    das stimmt schon, allerdings muss ich innerhalb der funktion auf membervariablen der klasse zugreifen. und dafür brauche ich einen passenden zeiger, der nicht auf HTML Document zeigt sondern auf das entsprechende Objekt.

    das wäre j alles kein problem wenn ich das so lassen könnte wie es jetzt ist. so läuft das ja. allerdings ist das so nicht der aufgabenstellung entsprechend. es soll lediglich eine methode public sein, vo der aus alles andere gesteuert wird. alle anderen methoden düren nicht öffentlich zugänglich sein.

  10. #10
    Luz
    Luz ist offline Haudegen
    registriert
    27-09-2003
    Beiträge
    698

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Diese Funktionen sollen nun nicht mehr öffentlich sein d.h. sie sollen nicht mit this.NAME = function() deklariert sein sondern mit function NAME(). Dann sind sie nur innerhalb der Klasse sichtbar. Nun weiß ich aber nicht, wie ich diesen Events die Funktionen dann zuweise. Schließlich muss dort auch eine Kopie von this mitgegeben werden um auf die Membervariablen zugreifen zu können.
    Problem 1: Private Funktionen können natürlich keinem Event zugewiesen werden, da sie ja nur innerhalb der Klasse verfügbar sind.

    Problem 2: Sogar wenn die Uebergabe mit tmpThis funktionieren würde, würde es nicht klappen. Denn private Funktionen kannst Du nicht über this ansprechen. (folglich auch nicht über tmpThis).
    Sie können einzig und allein mit "funktionsName()" aufgerufen werden, und zwar nur innerhalb der Klasse.
    (es sind eigentlich innere Funktionen einer Funktion).

    Problem 3: Die Uebergabe von tmpThis funktioniert nicht.

    --> Ich würde die Aufgabenstellung nochmals überdenken.

    lieber Gruss,
    luz

  11. #11
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Ich möchte mit tmpThis ja nicht die FUnktion ansprechen,sondern innerhalb der Funktion die Membervariablen, weil ich so (warum auch immer) keinen Zugriff auf sie habe.

    naja- danke für eure hilfe. ich werde mich nochmal genauer damit auseinander setzen. wenn sich was neues ergibt (probleme oder lösungen ) poste ich es in diesen thread.
    Geändert von ray_ray (10-11-2005 um 15:37 Uhr)

  12. #12
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Du kannst in der Event funktion nur auf dein Objekt zugreifen, wenn du dieses irgendwie dorthin übergibst.

    Eine gute Methode ist es, dem Objekt dem du den Event zuweist dein this mitzugeben, in etwa so:

    PHP-Code:
    function myObj(id)
    {
    this.name 'test';
    var 
    element document.getElementByIdid );
    element.obj this;
    element.onmouseover = function() 
    {
    alertthis.obj.name );
    }

    var 
    = new myObj('test');

    Natürlich muss dann ein Objekt mit der ID 'test' vorhanden sein.

    Ich verstehe immer noch nicht wo das Problem ist. Denn mit tmpThis wäre es genauso gegeangen.

  13. #13
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    ich werde das mal so machen wie du gepostet hast. danke für deine hilfe.

  14. #14
    Luz
    Luz ist offline Haudegen
    registriert
    27-09-2003
    Beiträge
    698

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    Hab gerade gesehen, dass in deinem Tutorial ein wesentlicher Aspekt von privaten Methoden unterschlagen wird (vielleicht hat das ja etwas mit dem Problem zu tun...?)
    Und zwar kennen private Methoden kein "this" (kennen sie schon, einfach nicht dasjenige der äusseren Funktion, sondern ihr eigenes).
    Also so:

    function Klasse() {
    this.test = "test";
    function privat() {
    alert (this.test); // undefined.
    }
    privat();
    }

    Der Workaround dafür geht so:

    function Klasse() {
    this.test = "test";
    var self = this;
    function privat() {
    alert (sel.testf); // liefert test
    }
    privat();
    }


    Vielleicht trägt das ja auch noch was zu deinem Problem bei...

  15. #15
    ray_ray ist offline Tripel-As
    registriert
    21-10-2005
    Beiträge
    208

    AW: Probleme mit "private" und "public" bei Zuweisungen von Funktionen an Events

    das private methoden kein passendes this kennen habe ich mir schon gedacht. habe mir bei diversen versuchen this und entsprechende variablen mit nem alert angesehen und das hat nicht gepasst. bei einer privaten funktion hae ich einfach eine kopie von this (nach dem selben schema wie luz es gepostet hat) als parameter übergeben. da geht das. in meinen anderen (am liebsten zu private gemachten) methoden geht das aber nciht weil ich im zusammenhang mit onMouse... eien event-variable vom browser bekome. wenn ich dann noch etwas übergebe muss dann dieser parameter auch üebrgeben werden, sonst bekomm ich logischerweise fehler. ich kann diese funktionen aber auch öffentlich lassen, da sie dann this kennen. dann läuft das alles perfekt. werde da noch ein bisschen herumtippen, aber wenn ich keien lösung finde lasse ich das so.

    danke für eure hilfe
    sebatian

Seite 1 von 2 12 LetzteLetzte

Lesezeichen

Berechtigungen

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