Methode zeitverzögert aufrufen

Biergamasda

Erfahrenes Mitglied
Hi, hab mal wieder ne Frage

meine Klasse:

Javascript:
function bomb()
{
    this.node;
    this.strength    = 4;
    this.explodeTime = ignitionTime;
    
    this.placeBomb = function(elemNode)
    {
        this.node = elemNode;
        this.node.style.backgroundColor = bombBackground;
        setTimeout("this.explode()",1000);
    }
    
    this.explode = function()
    {
        alert("boom");
        //this.node.style.backgroundColor = "yellow";
    }
}

Wie man sieht, sollte die Klasse eine Bombe darstellen, von der mehrere Instanzen angelegt werden können. Nun möchte ich, dass zB Bombe 1 3 Sekunden
nachdem sie gelegt wurde explodiert, Bombe 2 wiederum ebenfalls 3 Sekunden nachdem sie gelegt wurde...

Hoffe ihr könnt mir sagen wie ich das machen kann, nach meinem Muster funktionierts nicht.

lg Masda
 
Beim zeitverzögerten Aufruf hast du per this keinen Zugriff mehr auf das Objekt... du hast es gewissermassen verlassen.

Du musst den Bezug auf das bomb()-Objekt über dessen Namen herstellen, ca. so:

Code:
      function bomb()
      {
          //...
          this.placeBomb = function(elemNode)
          {
              this.node = elemNode;
              this.node.style.backgroundColor = bombBackground;
              setTimeout("bombe.explode()",1000);
          }
         //...
         
      } 
      bombe=new bomb();
      bombe.placeBomb();

Um dabei flexibel zu bleiben mit der Erstellung der Objekte, könntest du deren Namen beim Erstellen als Parameter übergeben, dann kannst du daraus per eval() den entsprechenden Aufruf für setTimeout() konstruieren.
 
Ich speichere meine Bomben in einem Array (bombs), wodurch ich mit bombs.length problemlos auf die jetzige, sprich letzte Bombe zugreifen kann.

habs jetzt so gemacht und es funktioniert
Javascript:
this.placeBomb = function(elemNode)
{
    this.node = elemNode;
    this.node.style.backgroundColor = bombBackground;
    setTimeout("bombs[" + (bombs.length - 1) + "].explode()",ignitionTime);
}

this.explode = function()
{
    this.node.style.backgroundColor = "yellow";
}


Vielen Dank für deine Antwort :)

lg Masda
 

Neue Beiträge

Zurück