class (Instrucción)
Declara el nombre de una clase, así como una definición de las variables, propiedades y métodos que la componen.
[modifiers] class classname [extends baseclass] [implements interfaces]{
[classmembers]
}
Argumentos
modifiers
Opcional. Modificadores que controlan la visibilidad y el comportamiento de la clase.classname
Obligatorio. Nombre de la clase. Sigue las convenciones de nomenclatura estándar de las variables.extends
Opcional. Palabra clave que indica que el nombre de clase (classname) amplía la clase base (baseclass). Si no se utiliza esta palabra clave, se crea una clase base estándar de JScript que amplía System.Object.baseclass
Opcional. Nombre de la clase que se amplía.implements
Opcional. Palabra clave que indica que el nombre de clase implementa una o más interfaces.interfaces
Opcional. Lista de nombres de interfaz separados con comas.classmembers
Opcional. Los parámetros classmembers pueden ser declaraciones de método o de constructor (definidas con la instrucción function), declaraciones de propiedad (definidas con las instrucciones function get y function set), declaraciones de campo (definidas con las instrucciones var o const), declaraciones de inicializador (definidas con la instrucción static), declaraciones de enumeración (definidas con la instrucción enum) o declaraciones de clase anidada.
Comentarios
Se pueden utilizar clases para crear instancias o servir como base para otras clases, dependiendo de los modificadores de la clase. Una clase marcada con el modificador abstract puede servir como clase base para la ampliación de otras clases; no obstante, no se pueden crear instancias de una clase abstract. Si la clase está marcada con el modificador final, sí se podrán crear instancias de ella con el operador new, pero no podrá servir como base.
Los métodos y constructores se pueden sobrecargar en una clase. Por tanto, varios métodos (o constructores) pueden tener los mismos nombres. Los miembros de clase sobrecargados se distinguen por sus firmas únicas, que se componen del nombre del miembro y del tipo de datos de cada uno de sus parámetros formales. Las cargas permiten a una clase agrupar métodos con funcionalidad similar.
Una clase puede heredar la funcionalidad de una clase base existente utilizando la palabra clave extends. Los métodos de la clase base se pueden reemplazar declarando un método nuevo con la misma firma que el método de la clase nueva. Los métodos de la clase nueva pueden tener acceso a miembros reemplazados de la clase base utilizando la instrucción super.
Se puede crear un modelo de una clase en una o más interfaces utilizando la palabra clave implements. Una clase no puede heredar comportamientos de una interfaz, pues las interfaces no proporcionan implementación para ningún miembro. Una interfaz proporcionará la clase con una "firma" que se podrá utilizar en su interacción con otras clases. A menos que la clase que implementa una interfaz sea abstract, se deberá proporcionar una implementación para cada método definido en la interfaz.
Se pueden utilizar modificadores para conseguir que el comportamiento de una instancia de clase se parezca más a un objeto de JScript. Para permitir que una instancia de clase controle dinámicamente propiedades agregadas, utilice el modificador expando, que crea de manera automática una propiedad indizada predeterminada para la clase. Sólo las propiedades expando son accesibles mediante la notación de corchetes del objeto Object de JScript.
Ejemplo 1
El siguiente ejemplo crea una clase CPerson con varios campos y métodos, cuyos detalles se han omitido. La clase CPerson sirve como clase base para la clase CCustomer del segundo ejemplo:
// All members of CPerson are public by default.
class CPerson{
var name : String;
var address : String;
// CPerson constuctor
function CPerson(name : String){
this.name = name;
};
// printMailingLabel is an instance method, as it uses the
// name and address information of the instance.
function printMailingLabel(){
print(name);
print(address);
};
// printBlankLabel is static as it does not require
// any person-specific information.
static function printBlankLabel(){
print("-blank-");
};
}
// Print a blank mailing label.
// Note that no CPerson object exists at this time.
CPerson.printBlankLabel();
// Create a CPerson object and add some data.
var John : CPerson = new CPerson("John Doe");
John.address = "15 Broad Street, Atlanta, GA 30315";
// Print a mailing label with John's name and address.
John.printMailingLabel();
El resultado de este código es:
-blank-
John Doe
15 Broad Street, Atlanta, GA 30315
Ejemplo 2
De CPerson se deriva una clase CCustomer con campos y métodos adicionales no aplicables a un miembro genérico de la clase CPerson:
// Create an extension to CPerson.
class CCustomer extends CPerson{
var billingAddress : String;
var lastOrder : String;
// Constructor for this class.
function CCustomer(name : String, creditLimit : double){
super(name); // Call superclass constructor.
this.creditLimit = creditLimit;
};
// Customer's credit limit. This is a private field
// so that only member functions can change it.
private var creditLimit : double;
// A public property is needed to read the credit limit.
function get CreditLimit() : double{
return creditLimit;
}
}
// Create a new CCustomer.
var Jane : CCustomer = new CCustomer("Jane Doe",500.);
// Do something with it.
Jane.billingAddress = Jane.address = "12 Oak Street, Buffalo, NY 14201";
Jane.lastOrder = "Windows 2000 Server";
// Print the credit limit.
print(Jane.name + "'s credit limit is " + Jane.CreditLimit);
// Call a method defined in the base class.
Jane.printMailingLabel();
El resultado de esta parte del código es:
Jane Doe's credit limit is 500
Jane Doe
12 Oak Street, Buffalo, NY 14201