Hallo,
Ich habe in einer Klasse eine Funktion (clearBuffer) definiert die sowohl aus der Klasse heraus als auch von 'außen' aufgerufen werden soll. Das Problem ist, dass die Funktion entweder nur von außen oder nur aus der Klasse heraus aufrufbar ist - nie aber beides. Ich habe auch schon viel mit der Syntax
httpRequest.prototype.clearBuffer = function()
{ alert( 'clearBuffer' );
}
herumexperimentiert, aber auch damit klappt es nicht.
Behelfsweise habe ich die Variable 'self' eingebaut in die ich im Konstruktor 'this' kopiere. Über diese Variable lässt sich die public-Funktion dann auch aus der Klasse heraus aufrufen, aber warum geht es nicht auch ohne diese Variable ?
Hier das Listing. Der problemhafte Aufruf ist in der letzten Zeile des Script-Blockes:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Test</title>
<script type="text/javascript" language="JavaScript">
<!--
function init()
{ // Neues Objekt erstellen
httpReq = new httpRequest();
// Aufruf der öffentlichen Funktion
httpReq.clearBuffer( 'init()' );
// Aufruf der Öffentlichen Funktion
httpReq.requestData();
}
// Konstruktor
function httpRequest()
{ // privates HTTP-Objekt
var xmlHttp;
var self = this;
// Öffentliche Funktion
this.clearBuffer = function( strFunctionName )
{ alert( 'Funktion clearBuffer. Aufgerufen aus Funktion: ' + strFunctionName );
}
// Aufruf der öffentlichen Funktion aus dem Konstruktor
this.clearBuffer( 'httpRequest()-Constructor' );
// Öffentliche Funktion
this.requestData = function()
{ try
{ if( window.ActiveXObject )
xmlHttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
else if( window.XMLHttpRequest )
xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = onData;
xmlHttp.open( "GET", 'Anfrage', true );
xmlHttp.send( null );
}
catch( excNotLoadable )
{ alert('Kein bekannter Browser');
} }
// Private Funktion
function onData()
{ if(( xmlHttp.readyState == 4 )&&( xmlHttp.status == 200 ))
{ // Aufruf der öffentlichen Funktion über 'this'
self.clearBuffer( 'readData()' );
// Aufruf der öffentlichen Funktion. Klappt nicht!!!
clearBuffer( 'readData()' );
} } }
//-->
</script>
</head>
<body onLoad="init()">
</body>
</html>
Gruß
Jan-Philipp