7

如何使用 javascript 将类名作为变量传递?

假设我有类 Person。

我想将类的名称传递给一个函数,以便该函数可以调用该类。

所以函数是

function openClass(name)

我想通过

openClass('person')

这样openClass就可以调用类人

例如

function openClass(name)
{
    return new name() // here I want this line to actually 
                      // call the class "Person" if that is 
                      // what is passed in as a name parameter,

}
4

4 回答 4

7

从技术上讲,JavaScript 中没有类。尽管许多第三方库确实在 JavaScript 之上创建了一个类系统。

“类”通常是一个构造函数。因此,如果您有函数的名称,则只需将其从全局范围中挖掘出来。假设函数是全局定义的:

var Constructor = window[name];
return new Constructor();

如果您的函数实际上是在 say 中定义的my.namespace.Person,那么它会更复杂一些,但仍然是相同的总体思路。

于 2012-11-07T16:00:01.090 回答
3

你可以做

function openClass(name) {
    return new window[name]();
}

演示(打开控制台)

当然,如果你没有将你的类声明为一个全局函数,而是在一个特定的对象或数组中,只需用这个对象或数组替换 window 即可。

于 2012-11-07T16:00:32.627 回答
2

您可以只传递该类的构造函数。所以如果类是Person,它将有一个构造函数

var Person = function(){
    //...
}

you can pass that in to getClass as an argument

var getClass = function(constructor){
    return new constructor()
};

var newObject = getClass(Person);
于 2012-11-07T16:02:37.997 回答
-3

只需调用openClass(Person).

这会将Person函数传递给openClass,在那里可以正常调用它。

如果您确实需要将其作为字符串传递,则可以Person按名称查找函数:

window[name]
于 2012-11-07T15:59:48.277 回答