【发布时间】:2011-02-22 23:01:55
【问题描述】:
是否可以在没有邪恶评估的情况下做这样的事情:
var str='MyClass';
eval('new '+str);
我刚刚了解到 PHP 中有 ReflectionClass... 谢谢。
【问题讨论】:
标签: javascript
是否可以在没有邪恶评估的情况下做这样的事情:
var str='MyClass';
eval('new '+str);
我刚刚了解到 PHP 中有 ReflectionClass... 谢谢。
【问题讨论】:
标签: javascript
你可以试试这个:
var str = "MyClass";
var obj = new window[str];
这是一个例子:
function MyClass() {
console.log("constructor invoked");
}
var s = "MyClass";
new window[s]; //logs "constructor invoked"
【讨论】:
通过反射创建对象(调用构造函数):
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();
};
【讨论】:
evaled 的字符串,这只有不好。除此之外,这个答案很棒。当前接受的答案仅在类可全局访问(即在窗口级别)时有效。例如,在闭包中定义的类不能使用window 方法进行实例化。
this 来引用当前范围。啦new this[className]