peterS.: selbstreferenzierung von js-objekten - timeout und Object

Beitrag lesen

gruss Struppi,

Fast jeder kennt das Problem man bastelt sich ein schönes Objekt und dann
möchte man mit diesem einen timer benutzen. Das geht aber nicht, da die
funktion setTimeout einen string als ersten Parameter erwartet und ...

... ein Objekt als String darzustellen ist nicht möglich.

richtig - aber man kann die objekt-referenz mit einem string umschreiben:
   http://www.pseliger.de/jsExtendedApi/jsApi.Object.selfReferences.dev.js

die forums-suche spuckt zwei relevante links aus, in denen der weg
   zur loesung dieses problems hoffentlich nachvollzogen werden kann:
   http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck=selfreference&lang=on&feld=alle&index_5=on&index_6=on&hits=100

function myObj(name)
{
    this.name = name;
    this.wert = 0;
}
myObj.prototype.timer = function()
{
    if( this.wert && !confirm('Der Zähler ist bei: ' + this.wert + '\n\nWeiter?') ) return;
    this.wert++;
    window.setTimeout(this.name + '.timer()', 500);
}
...
Geht das eleganter?

naja, ob das eleganter waere, weis ich nicht, denn es saehe dann so aus:

function MyObject() {
     this.setSelfReference();
     this.value = "something";
     //...
   }
   MyObject.prototype.timer = function () {
     if (this.value && !confirm("Der Zähler ist bei: " + this.value + "\n\nWeiter?")) {
       return;
     }
     ++this.value;
     setTimeout(this.getSelfReference() + ".timer()",500);
   };

um das gefrickel in "setTimeout" kommt man in diesem fall nicht
   drumherum, man spart sich aber die namensgebung!

ausserdem verwalten sich die referenzen immer dann von selbst,
   wenn eine referenz gesetzt oder geloescht wird. das ist ziemlich
   praktisch, wenn man zur laufzeit mit einer grossen und darueber
   hinaus noch schwankenden anzahl von objekten arbeiten muss, die
   diese art von selbstreferenzierung in anspruch nehmen.

(ich weiss dass man in neuren Browsern auch ein anonyme Funktion
definieren kann, das läuft aber nicht in meinem IE 4)

ob "jsApi.Object.selfReferences.js" im 4er msie laeuft, muss noch
   getestet werden (kein verpflichtender aufruf).

viel spass beim basteln - peterS. - pseliger@gmx.net

--
ie:( fl:) br:> va:| ls:& rl:| n4:} ss:} de:µ js:} zu:]