Aus einer öffentlichen Methode eine weitere öffentliche Methode aufrufen

BlubBlub

Mitglied
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>
	<head>
		<title> TestSite3 </title>
		
		<script type="text/javascript">	
			function MyClass()
			{
				this.init();
			}	
			
			MyClass.prototype.init = function(){				
				window.setTimeout('this.outputText()', 1000);
			}
			
			MyClass.prototype.ouputText = function(){
				alert('hello world');
			}
			
			var meinObjekt = new MyClass();
		</script>
	</head>
	
	<body>
    </body>
</html>

Hi ich versuche aus der init() Methode die outputText() Methode aufzurufen, doch ich erhalte im Firefox die Fehlermeldung "this.outputText is not a function". Dabei wird auf diese Codezeile verwiesen:

Code:
     window.setTimeout('this.outputText()', 1000);

Ich vermute das liegt daran, dass sich das this nicht mehr auf das MyClass Objekt bezieht, sondern auf das window Objekt, da es in der Attributliste der setTimeout Methode ist.
Also hab ich folgendes versucht:

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>
	<head>
		<title> TestSite3 </title>
		
		<script type="text/javascript">
			function MyClass()
			{
				this.init();
				var self = this;
				
				this.getSelf = function(){
					return self;
				}
			}	
			
			MyClass.prototype.init = function(){
				var mySelf = this.getSelf();
				
				window.setTimeout('mySelf.outputText()', 1000);
			}
			
			MyClass.prototype.ouputText = function(){
				alert('hello world');
			}
			
			var meinObjekt = new MyClass();
		</script>
	</head>
	
	<body>
    </body>
</html>

Doch auch dies funktioniert nicht, hierbei bekomm ich im Firefox die Fehlermeldung "this.getSelf is not a function". Dabei wird Bezug auf diese Codezeile genommen:

Code:
var mySelf = this.getSelf();

Wie macht mans richtig?
 
Zuletzt bearbeitet:
Das Problem deines zweiten Code ist, dass du zuerst "init" aufrufst und er danach die getSelf-Methode definierst. Also existiert sie zu dem Zeitpunkt des init-Aufrufs noch gar nicht.
Ich würde es einfach so Lösen

Javascript:
MyClass.prototype.init = function(){
	var _this = this;
	window.setTimeout(function(){_this.outputText();}, 1000);
}

Funktioniert aber auch nur, wenn du den Tippfehler bei "MyClass.prototype.ouputText" behebst ;)
 
Zurück