Flash.jpw

  • Obecné
  • Adobe Flash
  • ActionScript 1 & 2.0
  • ActionScript 3.0
  • ActionScript 3.0

  • Úvod do ActionScriptu 3.0
  • Nové jazykové pomůcky
  • Metody a funkce
  • Třídy
  • Systém událostí
  • Display objekty a Display list
  • Regulární výrazy
  • XML a E4X
  • Zvuk
  • Internetová komunikace
  • Předchozí: Nové jazykové pomůcky
  • Následující: Třídy
  • Metody a funkce

    Jakých změn doznaly funkce v AS3. Nepovinné argumenty, Rest operátor. Zrušení runtime prototypů.

    Pro základní informace o funkcích prosím nahlédněte do funkcí AS2. My se pro tuto chvíli zaměříme na novinky a změny.

    Funkce jsou metody

    Připomeňme, že Flash je ryze objektové prostředí. Funkce uvnitř objektu se nazývá metoda (toho objektu). Touto logikou dojdeme k závěru, že ve Flashi funkce vlastně neexistují.

    Možnou výjimkou by mohla být anonymní funkce. A také skromný zbyteček globálních funkcí prostředí.

    To jen pro ujasnění terminologie.

    Metoda už nemůže fungovat jako konstruktor

    V úvodu do objektů AS2 jsem ukazoval, že je možné za běhu programu vytvořit nový prototyp použitím funkce jako konstruktoru.

    function circle(radius){
    	this.radius = radius;
    	this.getArea = function(){
    		return Math.PI * Math.pow(this.radius, 2);
    	}
    }
     
    var kruh = new circle(10);

    1048: Method cannot be used as a constructor.

    Tato technika už není možná. V závislosti na tom také přestala existovat vlastnost objektu _proto_.

    Jediný možný způsob tvorby vlastních prototypů tedy zůstává prostřednictvím tříd.

    Metody mají přesně stanoven počet argumentů

    Ve AS2 jste mohli předávat metodě libovolný počet argumentů, bez ohledu na to, kolik jich měla explicitně vyjmenováno. Nespecifikované argumenty pak byly dostupné skrze objekt arguments.

    To nyní nelze.

    function vynasob(a, b){
    	return a * b;
    }
     
    vynasob(5, 10, 20);

    1137: Incorrect number of arguments. Expected no more than 2.

    Rest operátor

    Pokud je třeba vytvořit funkci s proměnlivým počtem argumentů, používá se rest operátor "...".

    function prumer(jmeno, ... hodnoceni){
    	var sum = 0;
    	for each(var i in hodnoceni){
    		sum += i;
    	}
     
    	return jmeno+': '+sum/hodnoceni.length;
    }
    prumer('Karel',5,3,1,1,2,3);	// Karel: 2.5

    hodnoceni je obyčejné pole se zbytkem argumentů.

    Nepovinné argumenty

    Poměrně běžná věc u ostatních jazyků. ActionScript ale odolával dlouho.

    function pozdrav(jmeno = 'Inkognito'){
    	return 'Dobrý den, pane '+jmeno;
    }
     
    pozdrav();	// Dobrý den, pane Inkognito

    Předdefinované globální funkce

    A pak že nerostou. Je to s podivem. Každá kočičárna už má ve Flashi svůj objekt, tito sirotci ne. Dokonce ani ve smeťáku flash.utils na ně nezbylo místo.

    Funkce eval byla zrušena

    Funkce eval, vyhodnocující řetězec pro přístup k proměnné, vlastnosti nebo objektu, už nejde použít.

    for(var i = 1; i<=5; i++){
    	eval('panel.button'+i).enabled = false;
    }

    Warning: 1060: Migration issue: The method eval is no longer supported.

    Protože je možné přistupovat k potomkům objektů také operátorem [], můžeme použít ekvivalentní postup.

    for(var i = 1; i<=5; i++){
    	panel['button'+i].enabled = false;
    }

    Ostatní zrušené globální funkce

    getPropertyBez náhrady odstraněna, čehož si asi ještě nikdo nevšimnul.
    targetPathBez náhrady odstraněna.
    getTimerPřesunuta do flash.utils.
    getVersionNahrazena flash.system.Capabilities.version.

    Některé nové globální funkce

    encodeURIPodobná escape, očekává ale celou URI, ze které šetrně zakóduje jen query.
    encodeURIComponentTotéž, ale očekávána je jen query část.
    decodeURIReverzní k předchozím.
    decodeURIComponent