Тип объекта определяется во время выполнения - Javascript (ExtJS)

StackOverflow https://stackoverflow.com/questions/1216782

Вопрос

Это может быть невозможно (или может быть смертельно просто!:) ) итак, вот оно...

Я хочу иметь возможность создавать объекты типа, который зависит от набора переменных, без необходимости в большом операторе 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 + "()");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top