Michael Kaufmann: Objekte und Events

Beitrag lesen

Hallo Bernhard,

's hat leider immer noch nicht funktioniert!

Stimmt, die Klammern gehören weg, aber Funktionen sind in Javascript genauso Objekte. Daher kann man auch funktionen auf funktionen "zuweisen" ! -gibt's echt, ehrlich! Nur gehören die Klammern weg, da jedoch deine Funktion dann genauso heissen würde wie deine Variable müsstest du dir einen anderen Namen für eine(n) der beiden einfallen lassen.

Meiner Meinung nach hast du recht !
Ich habe dein Script mal ein bisschen umgeschrieben, so dass es
Eventhandler (Mausklick ins Browserfenster) benutzt um die Methode
kreis1.zeige_umfang() aufzurufen. Dann tritt das selbe Problem ein wie
bei mir :-(

<html>
<head>
<script language="JavaScript">

function zeige_umfang ()
// hier habe ich etwas geändert, da ich nicht weiss, wie ich bei
// Eventhandlern irgendwelche Werte übergibt. Da diese  Funktion
// aber sowieso auf this.radius zugreifen kann muss man den Radius
// ja nicht extra übergeben.
    { // Deklaration einer Objektmethode (=Funktion)
    var umfang, pi=3.14;
    alert("Kreis "+this.name + " mit Umfang " + (pi*2*this.radius));
    // this.name greift auf Komponente name der  
    // aktuellen Instanz von Objekt kreis zu.
    }
  
  function position (x,y)
    { // Deklaration von Objekt position
    this.posx = x;          // mit 2 Komponenten posx und posy
    this.posy = y;          // this zeigt auf aktuelle Objektinstanz.
    }
                
  function kreis (name,radius,pos)
    {   // Deklaration von Objekt kreis
    this.name = name;
    this.radius = radius;
    this.pos = pos;                    // Objekt als Objektkomponente
    this.zeige_umfang = zeige_umfang;  // Methodenzuweisung !!!!!!!
    document.onmousedown = this.zeige_umfang; // Entweder hier, was besser wäre (man stelle sich 1000
    document.captureEvents(Event.MOUSEDOWN);  // Objekte vor, hier nur 2 Zeilen, unten wären es 2000)
    }
                                
</script>
</head>
<body>
<script language="JavaScript">
  pos1 = new position(0.0,0.0);
  kreis1 = new kreis("Kreis1",1.23,pos1);
  kreis1.zeige_umfang(); // hier kommt wieder da selbe Ergebnis wie vorher.

//  document.onmousedown = kreis1.zeige_umfang; // oder hier, egal beides
//  document.captureEvents(Event.MOUSEDOWN); // funktioniert nicht

</script>
</body>
</html>

Du musst es mir ja nicht glauben, aber über JavaScript hab ich mich schon längst aufgehört zu wundern ;-)

Naja, ich glaube dir schon, ich habe nur meine Glauben an NN
verloren. Manchmal kommt es vor dass er wegen JavaScripts abstürtzt
oder dass NN4.7 keine Scripts ausführen kann, die NN4.73 ohne Probleme
ausführt (teilweise ist es sogar andersrum, z.B. mit dem - im Variablennamen)

Dieses Beispiel kannst du Strg-Kopieren und austesten. Es funktioniert einwandfrei :-)

Das stimmt, ich glaube aber auch nicht, dass darin mein Problem liegt.
Es liegt vielmehr daran, dass der Eventhandler die falsche funktion
aufruft. Ich habe auch schon Funktionen umbenannt, so dass die
Objektmethode anders heisst als die Funktion. Aber all das hat nicht
geholfen. Ich könnte es natürlich auch mit eval machen. Das wäre dann
aber nicht mehr OOP, sondern ein Mix aus normal und OOP.

tschüss Michael