zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Mit setTimeout funktion im eigenen Objekt aufrufen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 10.05.2008, 23:02
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 28.04.2008
Beiträge: 32
PoWl befindet sich auf einem aufstrebenden Ast
Standard Mit setTimeout funktion im eigenen Objekt aufrufen

Hi!

Aus folgendem Code sollte mein Problem hervorgehen:

Code:
blub = new test();

function test()
{
  this.innerfunc = function(id)
  {
    ...

    setTimeout('this.innerfunc('+id+')', 1000);
  }
}
Ich würde gerne nach einer gewissen Zeit mit setTimeout die Funktion innerfunc des Objekts blub nochmal aufrufen. Normalerweise geschieht sowas von ausserhalb ja mit z.B. blub.innerfunc(3); Allerdings weiß die Funktion innerfunc selbst nicht, wie der Zeiger auf das Objekt, in dem sie sich befindet (blub), heißt. Wie kann ich diese funktion nochmal mit diesem Objekt aufrufen? Muss ich dazu dem Objekt dessen Namen per Hand übergeben damit innerfunc es beim setTimeout in den string einbauen kann oder kann man irgendwie direkt auf das objekt referenzieren? Vielleicht mit einer closured function?

Wieso hat damals niemand an eine funktion wie sleep(1000); gedacht? dann könnte man das einfach in eine while-schleife packen...

lg PoWl

Geändert von PoWl (10.05.2008 um 23:04 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 11.05.2008, 10:52
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Ja, am besten mit einer anonymen Funktion und du musst eine lokale Kopie von this erzeugen.
Code:
function test()
{
  var self = this;
  this.innerfunc = function(id)
  {
    ...

    setTimeout(function () {self.innerfunc(id);}, 1000);
  }
}
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 11.05.2008, 11:10
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 28.04.2008
Beiträge: 32
PoWl befindet sich auf einem aufstrebenden Ast
Standard

danke, das hat geklappt. funktioniert auch wenn man die var self = this; in die innerfunc mit reinschreibt.

allerdings verstehe ich noch nicht so ganz was da genau passiert. Was ist self hier in diesem Fall? Ein Zeiger auf das Objekt? Wird mit var das ganze noch von ausserhalb der Funktion zugänglich gemacht? Was würde dann passieren wenn ich zwei Instanzen der Funktion innerfunc kurz hintereinander mit verschiedenen objektnamen aufrufe? Dann wird ja zweimal hintereinander self gesetzt, wird das nicht überschrieben?

lg PoWl
Mit Zitat antworten
  #4 (permalink)  
Alt 11.05.2008, 11:23
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

var deklariert eine Variabel lokal in einer Funktion.
Mit Zitat antworten
  #5 (permalink)  
Alt 11.05.2008, 11:29
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 28.04.2008
Beiträge: 32
PoWl befindet sich auf einem aufstrebenden Ast
Standard

was ist der signifikante unterschied zu dem, dass man einfach direkt

setTimeout(function () {this.innerfunc(id);}, 1000);

verwendet? Zeigt hier this ansonsten nicht mehr auf das Objekt sondern irgendwo ins nirgendwo?

lg PoWl
Mit Zitat antworten
  #6 (permalink)  
Alt 11.05.2008, 11:35
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

nein, auf den Kontext in dem setTimeout die Funktion aufruft, this ist immer der Kontext. Im Prinzip das Objekt, das ganz vorne steht (das du aber beim setTimeout() Aufruf weggelassen hast).
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Anonyme Funktion durch call_user_func_array() aufrufen David Serveradministration und serverseitige Scripte 2 10.03.2011 20:10
[OOP] Funktion von Elternobjekt in neuer Funktion speichern -> Problem ab 2 Instanzen 1chris Javascript & Ajax 3 10.01.2011 16:50
JQUERY - Nach Formular senden weitere Funktion aufrufen sturmi2 Javascript & Ajax 1 28.10.2009 17:32
JQuery Funktion aufrufen wenn Bedingung erfüllt muella Javascript & Ajax 5 10.07.2009 17:55
[PHP] Funktion zum Optimieren von CSS Floele Serveradministration und serverseitige Scripte 2 13.08.2005 11:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:35 Uhr.