Javascript从字符串中的类名创建新对象

Javascript create new object from class name in string

本文关键字:新对象 对象 创建 字符串 Javascript      更新时间:2023-09-26

我有一点不起作用的代码:

PackageLoader.prototype.activate = function(name) {
    this.activePackages.push(new name());
}

我想做的是将一个新实例推送到activePackages数组,如果它得到的名称是字符串的话。如何做到这一点?

如果name没有引用全局范围中的"类",则可以安全地使用eval:

function toConstructor(className) {
    if (!/^[$_a-z][$_a-z0-9.]*$/i.test(className)) {
        throw new Error("Invalid class name: " + className);
    }
    try {
        return eval(className);
    }
    catch (error) {
        return null;
    }
}

使用它:

var Foo = {
    Bar: {
        Baz: function() {}
    }
};
var Klass1 = toConstructor("XMLHttpRequest");
var xhr = new Klass1();
xhr.onreadystatechange = function() {};
var Klass2 = toConstructor("Foo.Bar.Baz");
var baz = new Klass2(3);
console.log(baz.x); // logs 3
var Klass3 = toConstructor("I.Do.Not.Exist");
console.log(Klass3); // logs NULL

如果在全局范围中,请使用括号表示法

this.activePackages.push(new window[name]());