COMMENT SIMULER "THIS" AU SEIN D'UNE FONCTION STATIQUE !!!

SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007 - 18 juil. 2005 à 18:17
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010 - 28 juil. 2005 à 17:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32775-comment-simuler-this-au-sein-d-une-fonction-statique

BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
28 juil. 2005 à 17:01
petit erratum et je m'arretes là :

for (var id in _root) {
if (eval([id]).toString() == "top30") {
trace([id]+" est un occurence de myObject");
}
}

en effet, le "this" est inutile puisqu'initialisé à la construction de la classe par la déclaration de toString et le passage de traceThisToString comme paramettre.
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
28 juil. 2005 à 16:19
Hé le plus beau, c'est que ça marche.
voici comment à partir de l'exemple précédent on peu récupérer les objets présent dans l'anim avec un boucle "for in"

for (var id in _root) {
if (eval([id]).toString(this) == "window") {
trace([id]);
}
}

(notez que for in n'accepte que String comme parametre)

je répette (pour ceux qui y mettraient de la mauvaise volontée) que ce qui m'interresse, c'est de simuler :

if(typeof ([id] == "movieclip")

en passant le nom de la classe comme paramettre de type.

@++ et bon code.
BananaTree Messages postés 337 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 2 novembre 2010
28 juil. 2005 à 12:39
slt top30

très interressant comme travail.
plongé dans mes codes de débogageje cherchais un moyen de simuler le fameux typeof().

en etudian ton code, au début j'ai pas trop compris, puis j'ai réalisé que tu faisais une surcharge de la fonction globale toString.

de là m'est venue cette idée :
trace ( theObject.toString(this) ) ;
qui peu se traduire par retourne la valeur de theObject sous forme de chaine (et on revient au typeof() qui m'interresse).

soit pour ma classe :
class myObject
{
private var name : String = "top30";
public var toString : Function = traceThisToString;
public function myObject ()
{
}
private function traceThisToString ()
: String
{
var o:Object = eval ("this");
return o.name ;
}
}

et pour le fla :
theObject = new myObject () ;
trace ( theObject.toString(this) ) ;

de fait, ton code m'a rendu ce grand service : simuler typeof() attribuant un nom perso sous forme de chaine à une classe.

cette approche est très interressante.

bonne continuation dans le hack top30, ça poura donner de nouvelles idées.
el djawel Messages postés 1 Date d'inscription mercredi 29 juin 2005 Statut Membre Dernière intervention 19 juillet 2005
19 juil. 2005 à 09:21
hum ca a l'air intéressant tout plein ca... je le met en pratique et je reviens
top30 Messages postés 1158 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 6 août 2010
18 juil. 2005 à 19:09
Et le hacking c'est pas une sorte de bricolage pour atteindre des buts non désirés par les créateurs d'un language ? :\
SuperDevy Messages postés 842 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 2 juillet 2007
18 juil. 2005 à 18:17
>"Je me demande même si c'est pas limite du "hacking" ???"
En tout cas, c'est du bricolage ...

C'est marrant cette utilisation de eval, comme quoi ça peut encore être utile parfois !