sort([comparefunction])

Du hast ja ein Klassenattrbut that, deklariert. (public static var that:Klasse = this)

Wenn ich jetzt Objekt1 erstelle, bekommt that eine Referenz zu Objekt1. Erstelle ich anschließend Objekt2 so erhält that nun eine Referenz auf Objekt2, nicht mehr auf Objekt1. Oder nicht?

p-flash
 
Ja, aber wo ist das Problem?

So, wie ich Deine Aussage interpretiere, hast Du:
  • Die Klasse "Foo", die sämtliche Methoden zur Sortierung enthält

  • Im Film mindestens 2 Instanzen von "Foo": z.B. "foo1" und "foo2"

  • und willst nun die Sortierungsmethode des Objektes "foo2" ausführen, wobei diese Funktion auf eine interne Testfunktion von "foo1" verweist ...

Was soll das für einen Sinn machen? :confused:

Gruß
.
 
Habe mich schlecht ausgedrückt:

Also, ich habe eine Klasse Rangliste. Diese enthält funktionen zum Sortieren. Die nehmen nur Methoden des eigenen Objekt zur Hilfe. Von dieser Rangliste habe ich 8 Objekte.

Jedes mal wenn sich etwas ändert, wird die entsprechende Rangliste aktualisiert. Aber wenn that dann eine Referenz eines anderen Objekts enthält, wird die falsche Liste aktualisiert.

p-flash
 
that enthält aber immer eine Referenz auf das aktuelle Objekt - wenn Du in rangliste8 die Sortierungsmethode aufrufst, verweist "that" dort auch auf rangliste 8 (entsprechend bei den anderen Instanzen). ;-]

... allerdings habe ich immernoch das Gefühl, dass wir aneinander vorbei reden.

Gruß
.
 
Hmm...ich dachte ein Klassenattribut hat für alle Objekte den gleichen Wert. D.h. das that in rangliste1 ist das selbe wie in rangliste8 da es ja über die Klasse abgerufen wird.

p-flash
 
Nein, das gilt für statische Member - dafür sind sie da. ;)

(statische Variablen können sich daher nicht auf Eigenschaften der einzelnen Instanzen beziehen)

Gruß
.
 
Ok,

Code:
class Foo {
    public var that:Foo; // bezieht sich dann auf die aktuelle Instanz
    private var instance:Number;

    public function Foo() {
        that = this; // falls mans mal braucht
        instance_time = getTimer();
    }

    // hat nichts mit der Instanz zu tun:
    public static function bar(param:Number):Void {
        return (Number)? true : false;
    }

    // gibt Erstellungszeit der Instanz zurück:
    public function getTimer():Number {
        return this.instance_time;
    }
}

Testaufrufe:
Code:
import Foo;

var bla = new Foo();

trace(bla.getTimer()); // gibt Erstellungszeit von bla zurück

trace(Foo.bar(17)); // geht völlig ohne Instanz

trace(Foo.that); // Führt zu einer Fehlermeldung, da that eine
Referenz auf ein Objekt der Klasse ist.

trace(bla.that); // Gibt eine Referenz auf bla zurück

Gruß
.
 
Tobias Menzel hat gesagt.:
Oh, stimmt - das wird sich ähnlich wie mit Intervallen verhalten. Zugriff auf Klassenmember solltest Du aber eigentlich haben: sezte einfach ein
Code:
 public static var that:Klassentyp = this;
an den Anfang und arbeite dann in der Funktion damit statt mit "this".

Gruß
.

Dein Beispiel hier war aber mit static. Deshalb war ich verwirrt. Jetzt sieht es so aus

public var that:Foo;

War es vorher ein Fehler?
 
:-( - Oha! Jupp, das war tatsächlich ein Fehler meinerseits. Member, die auf die eigene Instanz zeigen, dürfen natürlich nicht statisch sein (ausserdem steht die Referenz ja erst im Konstruktor zur Verfügung).

Die von mir angehängten Beispiele sollten allerdings korrekt sein.

Gruß
.
 

Neue Beiträge

Zurück