Code :
- _global.eccart=500;
- _global.num=5;
-
- for (var i = 1; i <= _global.num; i++) {
- var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
- loadMovie("pict_" + i + ".swf", clip);
- clip.id = i;
- clip._x = (i-1)*_global.eccart;
- clip._y = 200;
- clip.onRelease = clipClick;
- function clipClick() {
- trace( "id: " + this.id );
- }
|
"()" est l'opérateur d'appel d'une fonction, "clipClick" est une fonction. Quand on supprime l'opérateur d'appel, on pointe juste la fonction.
C'est pour ça que ...
Code :
- delete this.onRelease
|
... est couramment utilisé, là c'est le même principe.
Lors d'une affectation du type :
Code :
- clip.onRelease = clipClick;
|
le scope de la fonction est logiquement celui de l'objet à laquelle elle est attribuée ici <clip>, donc this = le bouton.
mon premier code est donc équivalent à ça, mais en plus logique et en moins lourd :
Code :
- import mx.utils.Delegate;
- _global.eccart=500;
- _global.num=5;
-
- for (var i = 1; i <= _global.num; i++) {
- var clip:MovieClip = this.createEmptyMovieClip("clip" + i, i);
- loadMovie("pict_" + i + ".swf", clip);
- clip.id = i;
- clip._x = (i-1)*_global.eccart;
- clip._y = 200;
- clip.onRelease = Delegate.create(clip,clipClick);
- function clipClick() {
- trace( "id: " + this.id );
- }
|
Les fonctions sont des objets de la classe Function, qui est intéressante et très pratique, particulièrement sa méthode call() pour faire des callbacks "scopables" qu'on trouve parfois dans l'API (par exemple reproduire une structure du type setInterval( <scope> , <méthode> , ... )).
Message édité par antika le 06-11-2007 à 22:25:28