Was ist das denn?

Geflügel

Erfahrenes Mitglied
Hallo,

eine Klasse soll erweitert werden..

Code:
function Klassenname(){}
Klassenname.Handling = { 
  bla: function (a,b){ return a*b; },
  bla2: function (a,b){return a/b; }
};

Ab der 2. Zeile verstehe ich leider nix mehr. Wo kann ich mehr über dieses Konstrukt erfahren? Habe sowas in Javascript noch nie zuvor gesehen. Und: warum heißt es in der 2. Zeile nicht Klassenname.prototype.Handling ?

Vielen lieben Dank im Voraus!
 
Hi,

das Variable des Funktions-Objekts (Klassenname) wird um ein weiteres Objekt erweitert (Handling). Dieses steht anschliessend als Komponente zur Verfügung.
Die Funktion Klassenname ist anschliessend weiterhin als solche zu verwenden.
Code:
function Klassenname(){ return "Klassenname";} // Ist das gleiche wie das Zuweisen einer Funktion an eine Variable
                                               // var Klassenname = function(){ return "Klassenname";};

// Nur die Variable Klassenname erhalt die Eigenschaft Handling mit seinen Funktionen
Klassenname.Handling = {
  bla: function (a,b){ return a*b; },
  bla2: function (a,b){return a/b; }
};

alert(Klassenname.Handling.bla(2,3) + "\n" + Klassenname());
prototype ist eine Eigenschaft von Funktionen, die auf ein vordefiniertes Prototypobjekt verweist. Interessant wird sie, wenn Funktionen als Konstruktoren neuer Objekte mit dem Operator new verwendet werden.
Code:
function Klassen_name(){
  this.name = "Klassen_name";
}

// Jede Instanz erhält die Eigenschaft Handling mit seinen Funktionen
Klassen_name.prototype.Handling = {
  bla: function (a,b){ return a*b; },
  bla2: function (a,b){return a/b; }
}

var objKlasse = new Klassen_name(); // Funktion als Konstruktor (neue Instanz)
alert(objKlasse.Handling.bla(2,3) + "\n" + objKlasse.name);

Ciao
Quaese
 
Danke erstmal (wie immer :)). Aber könnte man dieses prototype-Dingens und "Klassen_name.prototype.Handling = {...}" nicht auch direkt in function Klassen_name(){.. } unterbringen?
 
Hi,

du hast recht, dass das "prototype-Dingens" auch in die Objekt-Definition eingefügt werden könnte. Mit
der Definition über prototype ausserhalb hast du die Möglichkeit, bereits bestehende Klassen zu erweitern.

Als Beispiel soll das Objekt String dienen, auf dessen Quellcode du keinen Zugriff hast. Mit
prototype lassen sich jedoch Methoden hinzufügen und das Objekt ergänzen.
Code:
var strTest = "Geflügel";
String.prototype.reverse = function(){
  var strHelp = "";
  for(var i=(this.length-1); i>=0; i--){
    strHelp += this.charAt(i);
  }
  return strHelp;
}
alert(strTest.reverse());
Ciao
Quaese
 

Neue Beiträge

Zurück