Compartilhar via


Criação de classe avançada

Quando você define uma classe de JScript, você pode atribuir propriedades de classe definida, em seguida, pode herdar de outras classes.Propriedades, que são membros da classe semelhantes a campos, oferecem maior controle sobre como os dados são acessados.Usando a herança, uma classe pode estender (ou Adicionar comportamento para) outra classe.

Você pode definir uma classe para que as instâncias da classe oferecem suporte a propriedades expando.Isso significa que objetos com base na classe podem ter propriedades e métodos adicionados dinamicamente ao objeto.Objetos com base na classe expando oferecem alguns a mesma funcionalidade, com base em protótipo objetos.

Classes e propriedades

Usa o JScriptfunção get and conjunto de funções instruções para especificar as propriedades.Você pode especificar um ou ambos os acessadores para criar propriedades somente leitura, somente para gravar ou leitura-gravar, embora as propriedades somente gravar são raras e podem indicar um problema com o design da classe.

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

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

Neste exemplo, propriedades são usadas para acesso um campo protegido.O campo está protegido para ajudar a impedir que o código externo alterem seu valor e, ao mesmo tempo, permitir 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 for atribuído um nome em branco à Name propriedade, um erro é gerada.

Herança de classes

The amplia palavra-chave é usada ao definir uma classe que se baseia em outra classe.JScript pode estender mais comum de linguagem specification (CLS)-compatível com classes.Uma classe definida usando o amplia palavra-chave é chamada uma classe derivada e a classe que seja estendida é chamada de classe base.

Neste exemplo, um novo Student classe é definida, o que estende o Person classe no exemplo anterior. A classe aluno reutiliza o Name propriedade definido na classe base, mas define um novo sayHello método que substitui o sayHello método da classe 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 alterar o método correspondente na classe base.

Objetos expando

Se você quiser apenas um objeto genérico seja expando, 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 você desejar que uma das suas classes expando ser, 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

Criando suas próprias classes

Outros recursos

Objetos com base em classe

Objetos do JScript