2009-08-01 73 views
1

這是不可能的(或者可能是死的容易!:)),所以這裏是......對象類型 - 使用Javascript(ExtJS的)

我希望能夠創建一個類型的對象這取決於變量集,而不需要大的switch語句。

我認爲這是在PHP中可以做這樣的事情......

$objectType = "myNewClass"; 
$newObject = new $objectType(); 

在$ NEWOBJECT變量將容納Class「myNewClass」的一個實例。

這是(或任何類似的技術)可能與Javascript?

感謝 斯圖爾特

回答

4

如果你的構造函數是在全球範圍內定義的,您可以訪問它槽支架符號(窗口[fnName]):

function ObjectType1(){ // example constructor function 
    this.type = 1; 
} 


var objectType = 'ObjectType1'; // string containing the constructor function name 

var obj = new window[objectType](); // creating a new instance using the string 
            // variable to call the constructor 

參見:Member Operators

+0

非常感謝!這很有用。對於將來可能訪問此類的用戶的唯一修改是,在ExtJS上下文中,如果將「對象」更改爲開始使用的ExtJS名稱空間。例如「var obj = new Ext.ux ['myObject']();」再次感謝! – Stuart 2009-08-01 15:31:47

-2

應該可以使用eval():

var obj = eval("new " + objectType + "()"); 
+0

-1爲懶惰和危險的代碼。 – 2009-08-02 07:02:11

1

CMS的答案很好,但在EXT中,您可能正在處理命名空間。

我創建包含任何動態類對象映射:

// within a namespace: 
var ns = { 
    Thinger: function(){} 
}; 

// globals: 
var Zinger = function(){} 

// map: 
var classes = { 
    zinger:Zinger, 
    thinger:ns.Thinger  
}; 

var type = "thinger"; 

var myClass = new classes[type](props, type, etc);