Hallo,
war vielleicht schlecht formuliert.
mit "innerhalb" meinte ich, dass ich halt so, wie in meinem beispiel, eine objektmethode definiere, mit deren aufruf sich die jeweilige objektinstanz selber "löschen" kann.
Hm, ich habe das OO-Modell anders verstanden. Die Klasse (der Prototyp) ist die Beschreibung der Variablen und Methoden, die ein Objekt ausmachen, die Konstruktionsunterlage also. Objekte entstehen durch die Anwendung dieser Konstruktionsunterlagen (mit dem new Operator). Hierbei entsteht eine Instanz des Objektes im Arbeitsspeicher, die durch eine Variable referenziert wird. Objektinstanzen sind dann hinfällig, wenn sie durch keine Variable mehr referenziert werden. Dann brauchen sie auch keinen Platz mehr im Arbeitsspeicher. Die Destructor-Idee ist, wie gesagt, eine C++ Eigenheit.
nein, ich will im prototyp eine methode verankern, mit der die betreffende objektinstanz _sich selbst_ den garaus machen kann.
Das ist in Java(Script) nicht vorgesehen. Der Arbeitsspeicher wird durch die JVM (Java) bzw. den JavaScript-Interpreter (JavaScript) verwaltet. Diese sind zuständig für das Einsammeln von Müll (nicht mehr referenzierte Objekte).
Bei Java erbt jedes Objekt die Methode Object.finalize(). Die wird immer ausgeführt, wenn der Müllsammler das Objekt schluckt. Das dient dazu, dass der Programmierer hier einige eigene Aktionen des Speichermanagements verankern kann. JavaScript kennt soetwas allerdings nicht, soweit ich weiß.
ich hatte das statt einer methode, die delete this auszuführen versucht, auch noch mit this = null; probiert, aber da meckert mich die JS-konsole vom firefox mit irgendwas von wegen unerlaubter zuweisung an (genaue meldung gerade nicht parat).
Das "this" ist in diesem Kontext zwar die aktuelle Objektinstanz, allerdings losgelöst von der Referenzierung, quasi direkter Speicherzugriff. Normalerweise sollte auch "delete this" hier eigentlich einen Fehler bringen. Du würdest _dadurch_ das Speichermanagement durcheinander bringen, weil Du der Referenz (Variable) ihren referenzierten Speicherbereich klaust. Dann gäbe es eine Referenz "meinObjekt" auf nichts, im Gegensatz zu "delete meinObjekt", was die Referenz "meinObjekt" entfernt und somit ein unreferenziertes Objekt im Arbeitspeicher lässt, was dann weggeräumt werden kann.
ich möchte aber ein objekt haben, dass ein paar aktionen durchführt, und sich danach selber ins nirwana verabschiedet.
var myObjectReference = new myObject();
delete myObjectReference;
Anders geht es, soweit ich weiß, nicht.
viele Grüße
Axel