Sök…


"Överbelastad" konstruktör via statisk metod

Konstruktörens överbelastning är inte tillgänglig i As3.

För att tillhandahålla ett annat sätt att hämta en instans av en klass, kan en public static metod tillhandahållas för att fungera som en alternativ "konstruktör".

Ett exempel för detta är flash.geom.Point , som representerar ett 2D-punktobjekt. Koordinaterna för att definiera punkten kan vara

  • kartsisk i den vanliga konstruktören

    public function Point(x:Number = 0, y:Number = 0) 
    

    exempel användning:

    var point:Point = new Point(2, -.5);
    
  • polar i en statisk metod

    public static function polar(len:Number, angle:Number):Point
    

    exempel användning:

    var point:Point = Point.polar(12, .7 * Math.PI);
    

    Eftersom det inte är en verklig konstruktör finns det inget new nyckelord.

inställ & få funktioner

För att säkerställa inkapsling bör medlemmvariabler i en klass vara private och endast vara tillgängliga för public via offentliga get / set access-metoder. Det är vanligt att prefixa privata fält med _

public class Person
{
    private var _name:String = "";

    public function get name():String{
        return _name;
        //or return some other value depending on the inner logic of the class
    }


    public function set name(value:String):void{
        //here you may check if the new value is valid
        //or maybe dispatch some update events or whatever else
        _name = value;
    }

Ibland behöver du inte ens skapa ett private fält för ett get / set par.
Till exempel i en kontroll som en anpassad radiogrupp behöver du veta vilken alternativknapp som är vald, men utanför klassen behöver du bara ett sätt att get / set endast det valda värdet:

public function get selectedValue():String {
    //just the data from the element
    return _selected ? _selected.data : null;
}
public function set selectedValue(value:String):void {
    //find the element with that data
    for (var i:int = 0; i < _elems.length; i++) {
        if (_elems[i].data == value) {
            _selected = _elems[i];//set it 
            processRadio();//redraw
            return;
        }
    }
}

paket

Paket är paket med klasser. Varje klass måste deklareras i ett paket med hjälp av package . package följs av namnet på ditt paket, eller följs av ingenting om du lägger till klasser i toppnivåpaketet. Underpaket skapas med punkt ( . ) Avgränsning. Paketmeddelandet följs av ett block som kommer att innehålla en definition av en class . Exempel:

package {
    // The top level package.
}

package world {
    // A package named world.
}

package world.monsters {
    // A package named monsters within a package named world.
}

Paket bör korrelera med filstrukturen för klasserna relativt källroten. Förutsatt att du har en källrotmapp med namnet src , kan ovanstående representeras korrekt i filsystemet som:

src
    TopLevelClass.as
    
    world
        ClassInWorldPackage.as
        AnotherClassInWorldPackage.as
        
        monsters
            Zombie.as

Överträffande metod

När du extend en klass kan du override metoder som den ärvda klassen definierar med hjälp av override nyckelord:

public class Example {
    public function test():void {
        trace('It works!');
    }
}

public class AnotherExample extends Example {
    public override function test():void {
        trace('It still works!');
    }
}

Exempel:

var example:Example = new Example();
var another:AnotherExample = new AnotherExample();

example.test(); // Output: It works!
another.test(); // Output: It still works!

Du kan använda super nyckelordet för att referera till den ursprungliga metoden från klassen som ärvs. Vi kan till exempel ändra kroppen till AnotherExample.test() till:

public override function test():void {
    super.test();
    trace('Extra content.');
}

Resulterar i:

another.test(); // Output: It works!
                //         Extra content.

Att åsidosätta klasskonstruktörer är lite annorlunda. override nyckelord utelämnas och åtkomst till den ärvda konstruktören görs helt enkelt med super() :

public class AnotherClass extends Example {
    public function AnotherClass() {
        super(); // Call the constructor in the inherited class.
    }
}

Du kan också åsidosätta metoder för att get och set .

getter och setter

Getters and seters är metoder som uppförs som egenskaper. det betyder att de har funktionsstruktur men när de används används de samma som egenskaper:

Strukturen för getterfunktioner :

de borde ha get nyckelord efter function och före funktionsnamn, utan argument, en returtyp anges och måste returnera ett värde:

public function get myValue():Type{
    //anything here
    return _desiredValue;
}

Syntax :

För att få värdet från en getter är syntaxen densamma som att få ett värde från en egenskap (inga parens () används).

trace(myValue);

Strukturen för setterfunktioner :

de borde ha set nyckelord efter function och före funktionsnamn, med ett argument och inget värde avkastning.

public function set myValue(value:Type):void{
    //anything here
    _desiredProperty=value;
}

Syntax :

för att ställa in värdet på en setter är syntaxen densamma som att ställa in ett värde på en egenskap (med lika tecken = sedan värde).

myValue=desiredValue;

ställa in en getter och setter för ett värde :

Obs: om du bara skapar getter eller bara setter med ett namn, skulle den egenskapen vara skrivskyddad eller endast inställd.

att göra en egenskap både läsbar och inställbar bör man skapa en getter och en setter med:

1. samma namn.
2. samma typ (typ av returvärde för getter och typ av ingångsvärde (argument) för setteraren,

Obs! Getters och seters ska inte ha samma namn som andra egenskaper eller metoder.

Användning av getters och setters:

Att använda getters och setters snarare än normala egenskaper har många fördelar:

1. att skapa skrivskyddade eller inställda egenskaper:
till exempel antal barn i ett visningsobjekt. det kan inte ställas in.

2. åtkomst till privata fastigheter:
ett exempel:

private var _private:Type=new Type();
//note that function name "private" is not same as variable name "_private"  
public function get private():Type{
    return _private;
}

3. när någon förändring krävs efter inställning av ett värde:
i det här exemplet måste du ändra den här egenskapen:

public static function set val:(input:Type):void{
    _desiredProperty=input;
    notifyValueChanged();
}

och många andra användningar



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow