Тип объекта, определенный во время выполнения - Javascript (ExtJS) - PullRequest
1 голос
/ 01 августа 2009

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

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

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

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

где переменная $ newObject будет содержать экземпляр класса "myNewClass".

Возможно ли это (или любой подобный метод) с Javascript?

Спасибо Стюарт

Ответы [ 3 ]

4 голосов
/ 01 августа 2009

Если ваши функции конструктора определены в глобальной области видимости, вы можете получить к ним доступ через обозначение в скобках (окно [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

См .: Операторы-члены

1 голос
/ 01 августа 2009

Ответ 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);
0 голосов
/ 01 августа 2009

Должно быть выполнимо с помощью eval ():

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