Тип объекта определяется во время выполнения - Javascript (ExtJS)
-
06-07-2019 - |
Вопрос
Это может быть невозможно (или может быть смертельно просто!:) ) итак, вот оно...
Я хочу иметь возможность создавать объекты типа, который зависит от набора переменных, без необходимости в большом операторе switch .
Я думаю, что в PHP возможно сделать что-то вроде...
$objectType = "myNewClass";
$newObject = new $objectType();
где переменная $newObject будет содержать экземпляр класса "myNewClass".
Возможно ли это (или любой подобный метод) с помощью Javascript?
Спасибо Стюарт
Решение
Если ваши функции конструктора определены в глобальной области видимости, вы можете получить к ним доступ через обозначение в виде скобок (window[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
Видишь: Операторы - участники
Другие советы
Ответ 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);
Должно быть выполнимо с помощью eval():
var obj = eval("new " + objectType + "()");