is it possible to do something like this without evil eval:
var str='MyClass';
eval('new '+str);
i just learned that there's ReflectionClass in PHP... thanks.
You could try this:
var str = "MyClass";
var obj = new window[str];
Here's an example:
function MyClass() {
console.log("constructor invoked");
}
var s = "MyClass";
new window[s]; //logs "constructor invoked"
Create object (invoke constructor) via reflection:
SomeClass = function(arg1, arg2) {
// ...
}
ReflectUtil.newInstance('SomeClass', 5, 7);
and implementation:
/**
* @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();
};
evaled. Aside from that, this answer is great. The currently accepted answer only works if the class is globally accessible (i.e., at the window level). Classes defined within closures, for instance, cannot be instantiated using the window method.this to reference the current scope. a la new this[className]