Partager via


Création de classes avancée

Mise à jour : novembre 2007

Lorsque vous définissez une classe JScript, vous pouvez lui assigner des propriétés et la classe définie peut ensuite hériter d'autres classes. Les propriétés, qui sont des membres de classe similaires aux champs, assurent un meilleur contrôle de l'accès des données. À l'aide de l'héritage, une classe peut étendre (ou ajouter un comportement à) une autre classe.

Vous pouvez définir une classe de sorte que les instances de cette classe prennent en charge les propriétés expando. Cela signifie que les objets basés sur une classe peuvent avoir des propriétés et des méthodes qui sont ajoutées dynamiquement à l'objet. Les objets expando basés sur une classe fournissent certaines fonctionnalités identiques à celles qui sont offertes par des objets basés sur un prototype.

Classes avec propriétés

JScript utilise les instructions function get et function set pour définir des propriétés. Vous pouvez spécifier que l'un ou l'autre accesseur, ou les deux, crée des propriétés en lecture seule, en écriture seule ou en lecture/écriture même si des propriétés en écriture seule sont rares et peuvent indiquer un problème dans le design de la classe.

Le programme appelant accède aux propriétés de la même façon qu'il accède aux champs. Il existe toutefois une différence notable : ce sont les accesseurs Get et Set de la propriété qui sont utilisés pour y accéder tandis que les champs sont accessibles directement. Une propriété permet à la classe de garantir la seule entrée d'informations valides, de conserver la trace du nombre de lectures et de définitions de la propriété, de retourner des informations dynamiques, etc.

Les propriétés servent généralement à accéder à des champs privés ou protégés de la classe. Les champs privés sont marqués avec le modificateur private et, dans ce cas, seuls les autres membres de la classe peuvent y accéder. Les champs protégés sont marqués avec le modificateur protected, auquel cas seuls les autres membres de la classe et les classes dérivées peuvent y accéder. Pour plus d'informations, consultez Modificateurs JScript.

Dans cet exemple, les propriétés permettent d'accéder à un champ protégé. Le champ est protégé pour aider à empêcher du code externe de modifier sa valeur tout en permettant aux classes dérivées d'y accéder.

class Person {
   // The name of a person.
   // It is protected so derived classes can access it.
   protected var name : String;

   // Define a getter for the property.
   function get Name() : String {
      return this.name;
   }

   // Define a setter for the property which makes sure that
   // a blank name is never stored in the name field.
   function set Name(newName : String) {
      if (newName == "")
         throw "You can't have a blank name!";
      this.name = newName;
   }
   function sayHello() {
      return this.name + " says 'Hello!'";
   }
} 

// Create an object and store the name Fred.
var fred : Person = new Person();
fred.Name = "Fred";
print(fred.sayHello());

Le résultat généré par ce code est le suivant :

Fred says 'Hello!'

Lorsqu'un nom vide est assigné à la propriété Name, une erreur est générée.

Héritage de classes

Le mot clé extends est utilisé pour définir une classe construite à partir d'une autre classe. JScript peut étendre la plupart des classes conformes CLS (Common Language Specification). Une classe définie à l'aide du mot clé extends est appelée classe dérivée et la classe qui est étendue, classe de base.

Cet exemple définit une nouvelle classe Student, qui étend la classe Person de l'exemple précédent. La classe Student réutilise la propriété Name définie dans la classe de base, mais définit une nouvelle méthode sayHello qui substitue la méthode sayHello de la classe de base.

// The Person class is defined in the code above.
class Student extends Person {
   // Override a base-class method.
   function sayHello() {
      return this.name + " is studying for finals.";
   }
}

var mary : Person = new Student;
mary.Name = "Mary";
print(mary.sayHello()); 

Le résultat généré par ce code est le suivant :

Mary is studying for finals.

La redéfinition d'une méthode dans une classe dérivée ne modifie pas la méthode correspondante de la classe de base.

Objets expando

Lorsque vous souhaitez qu'un objet générique soit expando, utilisez le constructeur Object.

// A JScript Object object, which is expando.
var o = new Object();
o.expando = "This is an expando property.";
print(o.expando);  // Prints This is an expando property.

Pour qu'une de vos classes soit expando, définissez la classe avec le modificateur expando. Il n'est possible d'accéder aux membres expando qu'avec la notation d'index ([]) ; il est impossible d'y accéder en utilisant la notation avec un point (.).

// An expando class.
expando class MyExpandoClass {
   function dump() {
      // print all the expando properties
      for (var x : String in this)
         print(x + " = " + this[x]);
   }
}
// Create an instance of the object and add some expando properties.
var e : MyExpandoClass = new MyExpandoClass();
e["answer"] = 42;
e["greeting"] = "hello";
e["new year"] = new Date(2000,0,1);
print("The contents of e are...");
// Display all the expando properites.
e.dump(); 

Le résultat généré par ce programme est le suivant :

The contents of e are...
answer = 42
greeting = hello
new year = Sat Jan 1 00:00:00 PST 2000

Voir aussi

Concepts

Modificateurs JScript

Création de vos propres classes

Autres ressources

Objets basés sur une classe

Objets JScript