2009-07-31 4 views
3

Я делал это раньше, но я не могу полностью запомнить синтаксис.передать класс как параметр, а затем создать экземпляр класса

Что я получил (упрощенно):

function createText(clazz:Class) 
{ 
    var font:Font = new clazz(); //throws Instantiation attempted on a non-constructor. 
} 

Я считаю, что это может быть сделано без использования getQualifiedClassName, но его долгое время. Любая помощь оценивается.

ответ

7

Вы, вероятно, проходящей нуль функции.

package 
{ 

import flash.display.Sprite; 

public class ClassTest extends Sprite 
{ 
    function ClassTest() 
    { 
     makeObject(Object); 
     makeObject(Sprite); 
     makeObject(null); 
    } 

    private function makeObject(type:Class):void 
    { 
     trace(typeof type); 
     var obj:* = new type(); 
     trace(typeof obj); 
     trace(""); 
    } 
} 

} 

Это выходы:

object 
object 

object 
object 

object 
TypeError: Error #1007: Instantiation attempted on a non-constructor. 
    at ClassTest/makeObject() 
    at ClassTest() 
+0

спасибо, что помогли мне тоже! – matthy

1

как вы передаете класс функции? , вызывающая линия должна была вывести ошибку в первую очередь, если нужный класс был недоступен, это странно.

Вы можете отправить реальный код?

здесь трюк для загрузки класса скомпилирован во внешнем SWF

var clazz:Class = this.yourLoader.contentLoaderInfo.applicationDomain.getDefinition("yourClassName") as Class; 
0

Оказывается, я не дал шрифт имя класса в CS3. Так что да, я пропускал нуль.