Создать объект из динамического имени класса - 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(); };
Ответ 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(); };