Partilhar via


Criação de classe avançado

Quando você define uma classe de JScript, você pode atribuir propriedades e, subseqüentemente, a classe definida pode herdar de outras classes. Propriedades, que são semelhantes aos campos de membros de classe, fornecem maior controle sobre como os dados são acessados. Usando a herança, uma classe pode estender (ou adicionar o comportamento) outra classe.

Você pode definir uma classe para que o suportam de instâncias da classe expando propriedades. Isso significa que os objetos baseados em classe podem ter propriedades e métodos que são adicionados dinamicamente ao objeto. Baseado na classe expando objetos fornecem algumas das mesmas funcionalidades objetos como baseada em protótipo.

Classes de propriedades

Usa a JScript obter a função e definir a função instruções para especificar propriedades. Você pode especificar um ou ambos os acessadores de criar propriedades somente leitura, somente para gravação ou leitura-gravação, embora as propriedades somente gravação são raras e podem indicar um problema com o design da classe.

O programa de chamada acessa as propriedades da mesma forma que ele acessa campos. A principal diferença é que o getter e setter da propriedade são usadas para realizar o acesso, enquanto os campos são acessados diretamente. Uma propriedade permite que a classe para verificar se apenas informações válidas está sendo inseridas, para controlar o número de vezes que a propriedade é lida ou definida retornar informações dinâmicas e assim por diante.

Propriedades são geralmente usadas para acessar campos particulares ou protegidos da classe. Campos particulares são marcados com o private modificador e somente com outros membros da classe podem acessá-los. Campos protegidos são marcados com o protected modificador e somente com outros membros da classe ou classes derivadas podem acessá-los. Para obter mais informações, consulte Modificadores de JScript.

Neste exemplo, as propriedades são usadas para acessar um campo protegido. O campo está protegido para ajudar a impedir que o código externo alterando seu valor, permitindo que as classes derivadas para acessá-lo.

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());

A saída desse código é:

Fred says 'Hello!'

Quando é atribuído um nome em branco para o Name propriedade, um erro é gerada.

Herança de Classes

O estende palavra-chave é usada ao definir uma classe que se baseia em outra classe. JScript pode estender a maioria dos especificação de linguagem comum (CLS)-compatível com classes. Uma classe definida usando o estende palavra-chave é chamado de uma classe derivada, e a classe que seja estendida é chamada de classe base.

Neste exemplo, uma nova Student classe é definida, o que estende o Person classe no exemplo anterior. Reutilizações de classe aluno a Name propriedade definido na classe base, mas define um novo sayHello método que substitui o sayHello método da 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()); 

A saída desse código é:

Mary is studying for finals.

Redefinir um método em uma classe derivada não altera o método correspondente na classe base.

Objetos expando

Se você quer apenas adicionar um objeto genérico para ser expandido, use o Object construtor.

// 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.

Se desejar que uma das classes a ser expandido, definir a classe com o expando modificador. Expando membros só podem ser acessados usando o índice ([]) notação; eles não podem ser acessados usando o ponto (.) notação.

// 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(); 

A saída deste programa é:

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

Consulte também

Conceitos

Modificadores de JScript

Criar suas próprias Classes.

Outros recursos

Objetos baseados em classe

Objetos de JScript