如何使用javascript将类名作为变量传递?
假设我有班级人员。
我想将类的名称传递给一个函数,以便该函数可以调用该类。
所以功能是
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,
}
答案 0 :(得分:7)
从技术上讲,JavaScript中没有类。虽然许多第三方库确实在JavaScript之上创建了一个类系统。
“class”通常是构造函数。因此,如果您拥有该功能的名称,则需要将其从全局范围中挖掘出来。假设函数是全局定义的:
var Constructor = window[name];
return new Constructor();
如果您的函数实际上是在my.namespace.Person
处定义的,那么它有点复杂,但仍然是一般的想法。
答案 1 :(得分:3)
你可以做到
function openClass(name) {
return new window[name]();
}
Demonstration(打开控制台)
当然,如果你没有将你的类声明为全局函数但是在特定的对象或数组中,只需用这个对象或数组替换窗口。
答案 2 :(得分: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);
答案 3 :(得分:-3)
只需致电openClass(Person)
。
将Person
函数传递给openClass
,可以正常调用它。
如果您真的需要将其作为字符串传递,那么您可以按名称查找Person
函数:
window[name]