Ergebnis 1 bis 12 von 12
  1. #1
    Früchtemüsli ist offline Mitglied
    registriert
    24-01-2013
    Beiträge
    28

    was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was anderes?

    Hi!

    Ich habe in einem Buch einen interessanten Code entdeckt. Allerdings weiß ich eigentlich nicht, was ich hier eigentlich habe.

    Hier eine vereinfachte Variante des Codes aus dem Buch:

    Code:
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       <head>
          <script type="text/javascript">
             "use strict";
             
             // Abstrakte Klasse?
             
             function AbstractClass() {
             };
             /**
              * Abstrakte Methode.
              * @param string text
              */
             AbstractClass.prototype.alert = function(text) {
                throw "not implemented";
             };
             /**
              * Statische Methode. Factory-Methode.
              * @param string className
              * @return object
              */
             AbstractClass.factory = function(className) {
                return new AbstractClass[className]();
             };
             
             // Klasse 0:
             
             AbstractClass.Class0 = function() {
             };
             AbstractClass.Class0.prototype = new AbstractClass();
             AbstractClass.Class0.prototype.alert = function(text) {
                alert('0: ' + text);
             };
             
             // Klasse 1:
             
             AbstractClass.Class1 = function() {
                this.alert = function(text) {
                   alert('1: ' + text);
                };
             };
             AbstractClass.Class1.prototype = new AbstractClass();
             
             // Hauptprogramm:
             
             var c0 = new AbstractClass.Class0();
             c0.alert('a');
             
             var c1 = new AbstractClass.Class1();
             c1.alert('b');
             
             var c00 = AbstractClass.factory('Class0');
             c00.alert('c');
          </script>
       </head>
       <body>
       </body>
    </html>
    Es geht mir um die Klasse, die ich hier "AbstractClass" genannt habe. Im Grunde genommen habe ich hier eine Klasse, die weitere Klassen als Properties hat. Ist meine AbstractClass wirklich eine abstrakte Klasse? Oder muss man das eher als Namespace betrachten?

    Ich habe nämlich so etwas noch nie gesehen, dass eine Klasse andere Klassen als Properties hat.

  2. #2
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Das ist ein bisschen von beiden.

    Einerseits nutzt du das Objekt AbstractClass als Namespace um weitere Kontruktorfunktion zu deklarieren. Dann weist du denn prototypen dieser Funktionen eine Instanz von AbstractClass zu. Das ist allerdigns relativ Sinnfrei, da du mit abstrakten Klassen relativ wenig anfangen kannst. Es gibt in JS ja keine Prüfung zur Übersetzungszeit, d.h. ob du den Fehler wirfst oder JS selber ist Geschmackssache, es hat aber keinen Vorteil wenn du es selbst machst.

  3. #3
    Früchtemüsli ist offline Mitglied
    registriert
    24-01-2013
    Beiträge
    28

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Dieser Code schaut in Buch ein klein wenig anders aus. Ist im Zusammenhang mit dem Factory-Pattern.

    "JavaScript für Enterprise-Entwickler" von Oliver Ochs. Seite 100.

    ob du den Fehler wirfst oder JS selber ist Geschmackssache, es hat aber keinen Vorteil wenn du es selbst machst.
    Auf die Art und Weise, wie ich es mache, kann ich den Fehler abfangen

  4. #4
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Zitat Zitat von Früchtemüsli Beitrag anzeigen
    Auf die Art und Weise, wie ich es mache, kann ich den Fehler abfangen
    Kannst du auch, wenn du es nicht so machst. Aber dann weißt du wenigstens wo der Fehler aufgetreten ist.

  5. #5
    Früchtemüsli ist offline Mitglied
    registriert
    24-01-2013
    Beiträge
    28

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Wie kann ich denn in JavaScript einen Fehler abfangen, wenn ich diesen Fehler nicht selbst per throw geworfen habe?

  6. #6
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    mit try und catch

  7. #7
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Oder um das zu verdeutlichen:
    HTML-Code:
    <!DOCTYPE HTML>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
       <head>
          <script type="text/javascript">
             "use strict";
             // Abstrakte Klasse?
             
             function AbstractClass() {
             };
             /**
              * Abstrakte Methode.
              * @param string text
              */
             AbstractClass.prototype.alert = function(text) {
                throw new TypeError("not implemented");
             };
             /**
              * Statische Methode. Factory-Methode.
              * @param string className
              * @return object
              */
             AbstractClass.factory = function(className) {
                return new AbstractClass[className]();
             };
             
             // Klasse 0:
             AbstractClass.Class0 = function() {};
             AbstractClass.Class0.prototype = new AbstractClass();
    		try{
    					 
    				 var c0 = new AbstractClass.Class0();
    				 c0.alert('a');
    				 
    		}catch(e){
    			alert(e.message + ' in ' + e.lineNumber); // not implemented in 15
    		}
    		try{
    				 var c0 = new AbstractClass.Class0();
    				 c0._alert('a');
    		}catch(e){
    			alert(e.message + ' in ' + e.lineNumber); // c0._alert is not a function in 43
    		}
    
          </script>
       </head>
       <body>
       </body>
    </html>
    Die erste Fehlermeldung zeigt auf die Zeile wo das throw ist, ist also relativ nutzlos, wenn du ein Skript mit tausenden Zeilen hast. Die zweite zeigt dorthin, wo der Fehler aufgetreten ist.

  8. #8
    Früchtemüsli ist offline Mitglied
    registriert
    24-01-2013
    Beiträge
    28

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Cool!

    Geht das echt mit allen Fehlern? Kann man alle von JavaScript gemeldeten Fehler mit try-catch abfangen? Und arbeiten da alle Browser gleich?

  9. #9
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Soweit ich weiß schon.

    Nachtrag: Ausser natürlich Fehler die zur Übersetzungszeit auftreten.

  10. #10
    Früchtemüsli ist offline Mitglied
    registriert
    24-01-2013
    Beiträge
    28

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Nicht schlecht. Was wichtiges dazugelernt. Danke.

  11. #11
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    Noch ein Nachtrag.

    Ein Namespace wäre in JS eher eine anonyme Funktion, dann wäre auch alles gekapselt. Also sowas:
    Code:
    var namespace = (function(scope) {
             scope.Class0 = function() {};
             return scope;
    })({});

  12. #12
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.297

    AW: was habe ich hier? eine abstrakte klasse oder einen namespace oder ganz was ander

    kleiner Hinweis noch, generell sollte man in JavaScript mit dem Klassenbegriff vorsichtig umgehen. eine abstrakte Klasse in (z.B.) Java ist was (und funktioniert auch) völlig anderes als in JavaScript (das ja nicht einmal den Klassenbegriff an sich kennt).

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 06-01-2013, 18:20
  2. PHP problem... oder was anderes?? O.o
    Von Red-Dragon im Forum Serverseitige Programmierung
    Antworten: 19
    Letzter Beitrag: 11-01-2006, 14:33
  3. Fragen zu etomite oder anderes CMS
    Von brainshock im Forum Tools und Programme
    Antworten: 1
    Letzter Beitrag: 23-08-2005, 15:42
  4. ereg_replace() oder was anderes?
    Von HILFE!!!! im Forum Serverseitige Programmierung
    Antworten: 17
    Letzter Beitrag: 15-04-2004, 09:28
  5. Langsames js oder anderes Problem ?
    Von blackfeet im Forum JavaScript
    Antworten: 9
    Letzter Beitrag: 11-05-2003, 22:10

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •