Struppi: OOP: Instanzname auslesen

Beitrag lesen

Die Variable "instanz" hast Du aber in dem Moment nicht mehr, wo Du den window.setTimeout verlässt. Da window-setTimeout ja event gesteuert ist und nicht wie ein "sleep" oder "wait" arbeitet (also nicht wirklich die Prozessausführung anhält), wird nach dem window.setTimeout die Funktion Klasse verlassen. Der Stack wird abgeräumt, nach einer Sekunde triggert der Eventhandler, will "instanz.tueWas()" aufrufen, was nicht mehr geht, weil das Objekt instanz nicht mehr existiert.

Das stimmt so nicht.

"instanz" müsste folglicch global sein, womit wir aber wieder die störende Abhängigkeit haben, die Du angesprochen hast.

nein, durch var ist es lokal aber bleibt bei der lokalen Funktionserzeugung erhalten.

  
<script type="text/javascript">  
function Klasse(n, t) {  
  this.name = n;  
  this.t = t;  
  
  var instanz = this;  
  window.setTimeout(function() {  
    instanz.tu_was();  
  }, t);  
}  
  
Klasse.prototype.tu_was = function()  
{  
   alert(this.name + ' nach ' + this.t + 'ms');  
}  
  
var o1 = new Klasse('A', 4000);  
var o2 = new Klasse('B', 1000);  
  
</script>  

Wobei man aber sagen muss das geht nicht in allen Browsern. Aber in llen aktuellen

Struppi.