Создать объект из динамического имени класса - ReflectionClass в JS?

Можно ли сделать что-то подобное без злого eval:

var str='MyClass';
eval('new '+str);

Я только что узнал, что там ReflectionClass в PHP... спасибо.

Ответы

Ответ 1

Вы можете попробовать следующее:

var str = "MyClass";
var obj = new window[str];

Вот пример:

function MyClass() {
   console.log("constructor invoked");
}

var s = "MyClass";
new window[s]; //logs "constructor invoked"

Ответ 2

Создать объект (вызвать конструктор) через отражение:

SomeClass = function(arg1, arg2) {
    // ...
}

ReflectUtil.newInstance('SomeClass', 5, 7);

и реализация:

/**
 * @param strClass:
 *          class name
 * @param optionals:
 *          constructor arguments
 */
ReflectUtil.newInstance = function(strClass) {
    var args = Array.prototype.slice.call(arguments, 1);
    var clsClass = eval(strClass);
    function F() {
        return clsClass.apply(this, args);
    }
    F.prototype = clsClass.prototype;
    return new F();
};