Передать класс в качестве аргумента конструктора - PullRequest
2 голосов
/ 26 октября 2011

Я пытаюсь передать свой класс объекта в качестве аргумента конструктора. У меня есть что-то вроде этого:

package myclass {

import flash.display.MovieClip;
import flash.display.BitmapData;
import flash.display.Bitmap;

public class Example extends MovieClip {

    public var  _stageImg:Bitmap;
    public var  _stageData:BitmapData;
    public var  _stageClass:Class;

    private var _stage:Object;

    public function Example(stageClass:Class) {
        _stageClass = stageClass;

    }

    public function createStage():Object {
        _stageData      = new _stageClass(0,0);
        _stageImg       = new Bitmap(_stageData);
        _stage          = addChild(_stageImg);

        return _stage;
    }

}
}

Теперь, когда я пытаюсь создать мой пример:

    import myclass.Example;
    var example:Example = new Example(myObjClass);

Я получаю сообщение, что я не передаю никакую переменную (Ошибка # 1063) Это почему? Что с ним не так?

1 Ответ

3 голосов
/ 26 октября 2011

Вы передаете экземпляр своего класса вместо определения самого класса.

В ActionScript это немного неуклюже, но вы можете получить определение класса экземпляра, например:

//first get the fully qualified classname, i.e. including the package
var className:String = getQualifiedClassName(myObjInstance);
//then get the class definition for that name
var Klass:Class = getDefinitionByName(className) as Class;
//and finally pass it to your constructor
var example:Example = new Example(Klass);

(примечание: я назвал переменную 'Klass', потому что 'Class' является зарезервированным ключевым словом)

...