从动态类名创建对象 - JS中的ReflectionClass?

时间:2011-02-22 23:01:56

标签: javascript

是否有可能在没有邪恶评估的情况下做这样的事情:

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

我刚学会了PHP中的ReflectionClass ... 感谢。

2 个答案:

答案 0 :(得分:22)

你可以试试这个:

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

以下是一个例子:

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

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

答案 1 :(得分:5)

通过反射创建对象(调用构造函数):

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();
};