Création d'objets avancée (Visual Studio - JScript)
JScript prend en charge l'héritage pour les objets personnalisés basés sur un prototype. L'héritage permet aux objets basés sur un prototype de partager un ensemble commun de propriétés et de méthodes qui peuvent être ajoutées ou supprimées dynamiquement. En outre, des objets individuels peuvent substituer le comportement par défaut.
Création d'un objet basé sur un prototype
Pour créer une instance d'un objet basé sur un prototype, vous devez commencer par définir une fonction constructeur. Pour plus d'informations, consultez Création de vos propres objets avec les fonctions constructeur. Après avoir écrit le constructeur, vous pouvez utiliser les propriétés de l'objet prototype (qui est lui-même une propriété de chaque constructeur) pour créer les propriétés héritées et les méthodes partagées. Le constructeur fournit les informations spécifiques à l'instance à un objet et l'objet prototype fournit quant à lui les informations et les méthodes relatives à l'objet, à cet objet.
Notes
Pour qu'une modification soit répercutée sur toutes les instances de l'objet, elle doit être apportée au niveau de l'objet prototype du constructeur. La modification de la propriété prototype d'une instance d'un objet n'affecte pas les autres instances du même objet.
Dans la mesure où les propriétés et les méthodes de l'objet prototype sont copiées par référence dans chaque instance d'un objet, toutes les instances ont accès aux mêmes informations. Il est possible de modifier la valeur d'une propriété prototype dans une instance pour substituer la valeur par défaut, mais la modification n'affecte que cette instance. L'exemple qui suit utilise le constructeur personnalisé, Circle. L'instruction this permet à la méthode d'accéder aux membres de l'objet.
// 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();
En appliquant ce principe, vous pouvez définir d'autres propriétés pour les fonctions constructeurs existantes (qui ont toutes des objets prototypes). Pour que l'opération soit possible, le mode rapide doit être désactivé. Pour plus d'informations, consultez /fast.
Si, par exemple, vous voulez supprimer les espaces figurant à gauche et à droite des chaînes (similaire à la fonction Trim de Visual Basic), vous pouvez créer votre propre méthode sur l'objet prototype String et toutes les chaînes de votre script en hériteront automatiquement. Cet exemple utilise un littéral d'expression régulière pour supprimer les espaces. Pour plus d'informations, consultez Regular Expression, objet.
// 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 + ")");
Après compilation du programme avec l'indicateur /fast-, le résultat généré par ce programme est le suivant :
leading and trailing spaces (35)
leading and trailing spaces (27)