Javascript 调用字符串构造函数

Javascript 调用字符串构造函数,javascript,Javascript,我有一个构造函数,例如webapp.core.cf1或Backbone.Router。但我得到的构造函数不是作为引用,而是作为字符串!我不能改变这一要求,合同。必须在一个字符串中。如何从中创建一个新对象,例如classfun(“Backbone.Router”) 如果我这样尝试,我会得到错误:。。。不是构造函数 为什么这不起作用?有没有不使用eval()的替代方法 提前多谢 编辑 谢谢大家的回答 谢谢你,Tronix117,这就是问题所在 谢谢你,本杰明·舒尔特,谢谢你的邀请 你可以这样做(如果

我有一个构造函数,例如webapp.core.cf1或Backbone.Router。但我得到的构造函数不是作为引用,而是作为字符串!我不能改变这一要求,合同。必须在一个字符串中。如何从中创建一个新对象,例如classfun(“Backbone.Router”)

如果我这样尝试,我会得到错误:。。。不是构造函数

为什么这不起作用?有没有不使用
eval()
的替代方法

提前多谢

编辑

谢谢大家的回答

谢谢你,Tronix117,这就是问题所在

谢谢你,本杰明·舒尔特,谢谢你的邀请

你可以这样做(如果我理解正确):

函数getObjectByName(名称){ var nameParts=name.split('.'); var nameLength=nameParts.length; var范围=窗口; 对于(var i=0;i
这将允许您按对象名称实例化对象,并允许您根据需要传递参数。

如果您在控制台中尝试:

var A=function(a){this.test=a};
b = new window["A"](3);
console.log(b.test); // return 3

这意味着,您试图访问的东西不在window的范围内,它应该是这样的东西:window.something[“A”],如果你不知道什么是
某物
,那么你应该使用Benjamin的函数,否则就使用这个函数,因为它要快得多。

你能给出一个完整的例子吗?也许,还有,你真正想要发生的事情的示例代码?你如何调用
classfun
?你传递给它的是什么类型的变量?好东西检查
窗口
对象的类名属性。这解决了我遇到的一个问题。谢谢!不是他的问题问了这个问题,但是在非浏览器js中呢?@catbadger总是有一个顶级对象,在非浏览器环境中,如node.js和浏览器环境中的
窗口
,它通常是
全局
s、 如果你想成为跨环境的(浏览器+非浏览器),你可以这样做:
typeof global=='undefined'&&(window.global=window)
在脚本的开头,在你需要的任何地方使用
global
。因此在上面的例子中,你可以做
b=new global['a'](3)
function getObjectByName(name) {
    var nameParts = name.split('.');
    var nameLength = nameParts.length;
    var scope = window;

    for (var i=0; i<nameLength; ++i) {
        scope = scope[nameParts[i]];
    }

    return scope;
}

var ObjectClass = getObjectByName(cfstr)
new ObjectClass();
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();
};

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

ReflectUtil.newInstance('SomeClass', 5, 7);
var A=function(a){this.test=a};
b = new window["A"](3);
console.log(b.test); // return 3