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