2009-08-01 2 views
1

Это не может быть возможным (или может быть мертвым легко! :)) так вот она ...Тип объекта определяется во время выполнения - Javascript (ExtJS)

Я хочу, чтобы иметь возможность создавать объекты типа который зависит от набора переменных, без необходимости в большом операторе switch.

Я думаю, что это возможно в PHP, чтобы сделать что-то вроде ...

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

, где переменная $ newObject будет держать экземпляр «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

-2

Должно выполняться с использованием eval():

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

-1 для ленивого и опасного кода. –

+1

В интересах всех нас, не могли бы вы рассказать о том, как этот код ленив и как это опасно? – Zed

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); 
Смежные вопросы