Hi Ian,
maybe this will solve your problem (if I understood correctly):
var clazz:Class = getDefinitionByName("com.domain.MyClass") as Class;
http://livedocs.adobe.com/flex/2/langref/flash/utils/package.html#getDefinitionByName()
regards,
Christophe
2007/10/22, Ian Thomas <[EMAIL PROTECTED]>:
>
> Hi all,
>
> Got a bit of a tricky problem here that I'm banging my head against...
>
> If you assume I have some function that returns a Class object - for
> example:
>
> getAssetClass(id:String):Class
>
> This returns a Class object which, at some future time, will be called
> with new SomeClass() to construct an instance of an object.
>
> Let's assume that the body of the function looks something like this:
>
> function getAssetClass(id:String):Class
> {
> return GenericAssetClass;
> }
>
> However, the actual behaviour I need changes depending on the value of
> 'id'. Effectively what I want to happen is for the returned class to
> be parameterised in some way - so that when new SomeClass() is called it
> evaluates to new GenericAssetClass(id).
>
> In AS2, this was possible because constructors were just functions. I
> could happily say:
>
> function getAssetClass(id:String):Function
> {
> return function():Object {return new GenericAssetClass(id);}
> }
>
> However, in AS3 this won't work, as Class is quite a different thing from
> Function.
>
> Changing GenericAssetClass.prototype.constructor doesn't help, as it's
> static and applies to all instances of GenericAssetClass.
>
> Doing something like this:
>
> function getAssetClass(id:String):Class
> {
> GenericAssetClass.id=id;
> return GenericAssetClass;
> }
>
> class GenericAssetClass
> {
> public static id:String;
> public function GenericAssetClass()
> {
> // Do something that depends on 'id'
> }
> }
>
> won't help either, because as soon as you change the static
> GenericAssetClass.id, that change applies to all the constructors you've
> handed out.
>
> I could do something like this:
>
> function getAssetClass(id:String):Class
> {
> if (id=="id1")
> return GenericAssetClass1;
> else if (id=="id2")
> return GenericAssetClass2;
> // etc. as required
> }
>
> but the trouble is that there is only one, parameterised GenericAssetClass
> and I can't define all the options up front - it truly is dynamic.
>
> *sigh*
>
> I've a feeling this ought to be possible, I just can't for the life of me
> think how. Is there any way I can hook into the new Class() call somewhere?
> Or uniquely identify each reference to GenericAssetClass that I've handed
> out, so that I can use a lookup table during the construction phase?
>
> Thanks in advance,
> Ian
>
>
--
Christophe Herreman
http://www.herrodius.com