Jan-Philipp: Public-Funktion aus der Klasse aufrufen

Beitrag lesen

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