2009-07-16 41 views
2

我想做一個功能,打開一個窗口,但確保相同的窗口尚未打開。我希望能夠將它傳遞給一個非實例化的var或一個實例化的var,它可以以任何方式工作。如果窗口已經打開,則關閉窗口然後重新打開窗口。如何獲取變量的類型?並實例化它?

所以我需要一種方式來傳遞一個類型的變量或一個子類,如果它,並實例化適當的子類。

我期待這樣的事情:

public function openWindowOnce(window:Window):void 
{ 
    if(isOpen(window)) 
    { 
     closeIfOpen(window); 
    } 
    window = new Window(); /**<-- THIS LINE window can also be a sublcass of window, 
          * I want to instatiate the correct sublass, 
          * I also want to make sure that it is a Window or a 
          * Sublcass of window before I instatiate it. 
          */ 
    window.open(); 
} 

謝謝!

回答

5

您可以嘗試使用flash.utils.getDefinitionByName(),flash.utils.getQualifiedClassName()ClassFactory的組合來實現結果。

var className:string = getQualifiedClassName(object); //returns the class name  
var classObj:Class = getDefinitionByName(className) as Class; //get a Class object 
var factory:IFactory = new ClassFactory(classObj);// get a Class factory  
var newObj:Object = factory.newInstance();