MAJ : Aprés une étude plus approfondie du sujet avec Timothée Groleau, il apparaît que ce n'est pas vraiment un bug, mais je dirais plutôt un comportement assez particulier de l'instruction super utilisée avec apply ...

Je suis tombé sur un bug assez bizarre avec super, qui intervient lorsque l'on utilise un héritage sur plusieurs niveaux, et l'instruction apply. Une utilisation particulière provoque une récursivité infinie dans l'appel de méthodes.

Voyons tout d'abord le code :// Classe Parent
class Parent {
        function Parent() {
        }
        function doIt() {
                trace("doIt");
        }
}
// Classe Child
class Child extends Parent {
        function Child() {
                super();
        }
        function doIt() {
                super.doIt.apply(this,arguments);
        }
}
// Classe LittleChild
class LittleChild extends Child {
        function LittleChild() {
        }
        function doIt() {
                super.doIt.apply(this,arguments);
        }
}
// Main
var tst = new LittleChild();
tst.doIt();
//256 levels of recursion were exceeded in one action list.
//This is probably an infinite loop.
Le raisonnement est simple : la dernière classe applique la méthode doIt de sa classe mère (Child) qui elle-même applique la méthode doIt de sa classe Mère (Parent). A mon avis, la recursivité est provoqué par le fait que le super dans la méthode Child.doIt pointe encore vers Child.doIt ... :? Pourtant, si on appelle super.doIt sans utiliser apply (donc en faisant uniquement super.doIt()), la recusrsivité ne se fait pas ... Cela voudrait dire que super est en fait lié à this ?!? 8O J'avoue que je nage complètement, alors que je ne pense pas que mon raisonnement soit mauvais. J'ai effectué des tas de tests, mais j'avoue que ja na comprend pas trés bien de quoi il en retourne. Tout d'abord, il faut savoir que super est un objet, donc que se passe-t-il lorsque qu'on execute super() ?!? C'est bien un appel à une fonction ... sauf que super.apply(...) ne fonctionne pas... :( Je me suis aussi demandé si super n'était pas une propriété de this, mais apparemment non. Voici quelques codes essayé dans la classe LittleChild :class LittleChild extends Child {
  function Child() {
    /*** Test 1 ***/
    trace(typeof super); // object
    trace(typeof super.apply) // Erreur à la compilation
    /*** Test 2 ***/
    trace(this["super"]); // undefined
    /*** Test 3 ***/
    trace(super.doIt == Child.prototype.doIt) // true
    /*** Test 4 ***/
    trace(super.__proto__ == Child.prototype) // false
    trace(super.__proto__ == Parent.prototype) // true
  }
}

La dernière série de tests m'emmène à la conclusion que super est une instance de la classe mère, créée à partir de this.constructor ... qui est buggué dans Flash MX 2004 (voir le post à ce sujet) Ensuite, toutes les methodes du prototype sont copiées dans l'instance ... Le tout ensuite est de savoir quel est le super de cet objet super ?!? :roll:

Bon, je pense pas avoir été trés clair, je suis moi-même complètement perdu ... :P Je vais essayer de réfléchir à ca a tête froide, puis de clarifier tout ca ici ... 8)

PS : Si quelqu'un se sent de l'essayer sur Flash MX, ca clarifierait deja le fait que cet bug soit dû à celui de constructor ... ;)