Erweiterte Objekterstellung (JScript)
Aktualisiert: November 2007
JScript unterstützt Vererbung bei benutzerdefinierten, auf Prototypen basierenden Objekten. Durch die Vererbung können auf Prototypen basierende Objekte bestimmte Eigenschaften und Methoden gemeinsam verwenden, die dynamisch hinzugefügt oder entfernt werden können. Darüber hinaus können einzelne Objekte das Standardverhalten außer Kraft setzen.
Erstellen eines prototypbasierten Objekts
Um eine Instanz eines prototypbasierten Objekts zu erstellen, müssen Sie zuerst eine Konstruktorfunktion definieren. Weitere Informationen finden Sie unter Erstellen eigener Objekte mit Konstruktorfunktionen. Nach dem Schreiben dieses Konstruktors können Sie die Eigenschaften des Prototype-Objekts verwenden (das selbst eine Eigenschaft jedes Konstruktors ist), um geerbte Eigenschaften und freigegebene Methoden zu erstellen. Der Konstruktor stellt einem Objekt die instanzspezifischen Informationen bereit, während das Prototype-Objekt dem Objekt die objektspezifischen Informationen und Methoden bereitstellt.
Hinweis: |
---|
Damit alle Instanzen des Objekts berücksichtigt werden, muss das prototype-Objekt des Konstruktors geändert werden. Das Ändern der prototype-Eigenschaft einer Instanz eines Objekts hat keine Auswirkungen auf andere Instanzen des gleichen Objekts. |
Da die Eigenschaften und Methoden des Prototype-Objekts durch Verweis in jede Instanz eines Objekts kopiert werden, haben alle Instanzen Zugriff auf die gleichen Informationen. Sie können den Wert einer prototype-Eigenschaft in einer Instanz ändern, sodass er den Standardwert überschreibt; diese Änderung gilt jedoch nur für diese eine Instanz. Im Folgenden ein Beispiel für die Verwendung des benutzerdefinierten Konstruktors Circle. Die this-Anweisungermöglicht der Methode den Zugriff auf Member des Objekts.
// Define the constructor and add instance specific information.
function Circle (radius) {
this.r = radius; // The radius of the circle.
}
// Add a property the Circle prototype.
Circle.prototype.pi = Math.PI;
function ACirclesArea () {
// The formula for the area of a circle is pi*r^2.
return this.pi * this.r * this.r;
}
// Add a method the Circle prototype.
Circle.prototype.area = ACirclesArea;
// This is how you would invoke the area function on a Circle object.
var ACircle = new Circle(2);
var a = ACircle.area();
Mithilfe dieses Prinzips können Sie weitere Eigenschaften für vorhandene Konstruktorfunktionen definieren (die alle über Prototypobjekte verfügen). Dies funktioniert jedoch nur, wenn der schnelle Modus deaktiviert ist. Weitere Informationen hierzu finden Sie unter "/fast".
Wenn Sie beispielsweise voranstehende oder nachfolgende Leerzeichen aus Zeichenfolgen entfernen möchten (ähnlich der Trim-Funktion in Visual Basic), können Sie eine eigene Methode für das String-Prototypobjekt erstellen, und alle Zeichenfolgen im Skript erben automatisch diese Methode. In diesem Beispiel wird ein Regular Expression-Literal verwendet, um die Leerzeichen zu entfernen. Weitere Informationen finden Sie unter Regular Expression-Objekt.
// Add a function called trim as a method of the prototype
// object of the String constructor.
String.prototype.trim = function() {
// Use a regular expression to replace leading and trailing
// spaces with the empty string
return this.replace(/(^\s*)|(\s*$)/g, "");
}
// A string with spaces in it
var s = " leading and trailing spaces ";
print(s + " (" + s.length + ")");
// Remove the leading and trailing spaces
s = s.trim();
print(s + " (" + s.length + ")");
Nach dem Kompilieren mit /fast- lautet die Ausgabe dieses Programms wie folgt:
leading and trailing spaces (35)
leading and trailing spaces (27)