(flexcodeurs) [AS3] augmenter les core objects

0 views
Skip to first unread message

zwetan

unread,
Nov 12, 2005, 8:54:24 AM11/12/05
to FC...@googlegroups.com
Salut,
dans un autre thread je me plaignais de ne pas pouvoir ajouter
des methodes a la class String

j'etais meme pret a lancer une petition et tout :p

mais en fait c'est moi qui suis bete d'avoir pensé que AS3 compilait
dans la meme logique que AS2.

en lisant cela
http://groups.yahoo.com/group/flexcoders/message/24463

c'est devenu evident, ce n est pas la meme logique :)

On peut simplement augmenter les core objects AS3 en leur ajoutant
des methodes en passant par les prototype.

cela se passe comme ca

package
{

#include "String.as";

public class Toto
{

public function Toto()
{
var test:String = new String( "blah blah blah" );
test = test.trim(); //on a declaré String.prototype.trim dans
String.as
}
}

}

simple et efficace, j adore :)

petits desavantages:
- il n'y aura pas de compile-time type check sur ces methodes
(mais n'oubliez pas que le runtime type check lui reste valide)
- il se peut que vous ayez a supprimer le param -strict a la compilation

Apres on peut s'arranger pour avoir presque le meilleur des deux mondes
en combinant ces 2 techniques:
- ajout dans les prototype et compilation sans -strict
- compilation avec -strict et on load la lib augmentant les prototype avec
ApplicationDomain

Si plus tard Macromedia fournit les outils pour pouvoir recompiler
Global.as en Global.abc
on pourra meme avoir un compile-time check sur ces methodes
comme avec ce qu'il est possible defaire deja avec AS2
(cad faire un #include et ajouter les methodes intrinsic correspondantes
dans les core class)

zwetan


________________________________________
FlashCodeurs Next Generation
news://FCNG.buRRRn.com/flexcodeurs
________________________________________
admin blog: http://www.zwetan.com


ekameleon

unread,
Nov 12, 2005, 9:06:06 AM11/12/05
to FC...@googlegroups.com
Hello :)

>
> package
> {
>
> #include "String.as";
>

j'avais pas vu qu'on pouvait faire comme encore des #include :) A force
de ne plus trop les utiliser en AS2... on oublie ce genre de truc lol

Dans String.as .. tu as juste tapé un truc du style :

if (String.prototype.maMethode == undefined) {
String.prototype.maMethode = function () {
//
}
}

Faut que je teste cela pour voir ce que cela donne :)

EKA+ :)

zwetan

unread,
Nov 12, 2005, 11:14:05 AM11/12/05
to FC...@googlegroups.com
> >
> > package
> > {
> >
> > #include "String.as";
> >
>
> j'avais pas vu qu'on pouvait faire comme encore des #include :) A force
> de ne plus trop les utiliser en AS2... on oublie ce genre de truc lol
>
> Dans String.as .. tu as juste tapé un truc du style :
>
> if (String.prototype.maMethode == undefined) {
> String.prototype.maMethode = function () {
> //
> }
> }
>
> Faut que je teste cela pour voir ce que cela donne :)
>

oui oui tu peux juste declarer

String.prototype.maMethode

ou meme tester si elle existe deja avec un if

bref inline code powa :)

et a propos de AS2 , si si on peut faire des incudes

//sur _root
#include "String.as1"

//dans le String.as1 de l'include
String.prototpe.maMethode = function()
{
//etc..
}

//dans la class String intrinsic de AS2
intrinsic class String
{
//...
function maMethode():String;
}

zwetan

ekameleon

unread,
Nov 12, 2005, 11:34:10 AM11/12/05
to FC...@googlegroups.com
zwetan a écrit :
>>>package
>>> {
>>>
>>> #include "String.as";
>>>
>>
>>j'avais pas vu qu'on pouvait faire comme encore des #include :) A force
>>de ne plus trop les utiliser en AS2... on oublie ce genre de truc lol
>>
>>Dans String.as .. tu as juste tapé un truc du style :
>>
>>if (String.prototype.maMethode == undefined) {
>>String.prototype.maMethode = function () {
>> //
>>}
>>}
>>
>>Faut que je teste cela pour voir ce que cela donne :)
>>
>
>
> oui oui tu peux juste declarer
>
> String.prototype.maMethode
>
> ou meme tester si elle existe deja avec un if
>
> bref inline code powa :)
>
> et a propos de AS2 , si si on peut faire des incudes
>

Oui je sais qu'on peut en faire en AS2 (j'ai passé du temps à les virer
dans les classes de macromedia car MTASC en veut pas du tout lol)... et
si on compile en AS2 dans flash on peut pas en faire sans faire
l'intrinsic.. là si on peut faire un include sans intrinsic en AS3 et
que dans la version finale cela reste comme cela.. tout est cool :)

EKA+ :)

zwetan

unread,
Nov 12, 2005, 12:12:07 PM11/12/05
to FC...@googlegroups.com
>
> Oui je sais qu'on peut en faire en AS2 (j'ai passé du temps à les virer
> dans les classes de macromedia car MTASC en veut pas du tout lol)... et

c'est exactement a cause de cela que je ne supporterai pas
MTASC dans mon code.

Quand on implemente un langage, on le fait en entier,
virer les #include c'est trop arbitraire a mon gout.

> si on compile en AS2 dans flash on peut pas en faire sans faire
> l'intrinsic.. là si on peut faire un include sans intrinsic en AS3 et
> que dans la version finale cela reste comme cela.. tout est cool :)
>

bah il serait bien qu on puisse avoir l equivalent des intrinsic AS2
pour les native AS3

ca permettrait le compile-time type check
Reply all
Reply to author
Forward
0 new messages