Perl:
package Foo {
sub new { bless {} }
sub some_method { 42 }
}
my $f = "Foo"->new;
say ref $f; # 'Foo'
$f->some_method;
在Python中:
class Foo:
def some_method():
return 42
f = globals()['Foo']()
print(type(f).__name__) # 'Foo'
f.some_method
在Ruby中:
class Foo
def some_method
return 42
end
end
f = Module.const_get('Foo').new
puts f.class # 'Foo'
f.some_method
在Javascript中:
class Foo {
some_method() { return 42 }
}
let f = new ?????????????;
console.log(f.constructor.name); // 'Foo'
f.some_method();
如果Foo是普通函数而不是类,this["Foo"]
可以工作,但是你如何处理类?我尝试了eval
,但f
实例不在范围之外,因此该解决方案通常不合适。
编辑以解决可能的重复问题:工厂,注册管理机构等仅在我可以参考工厂中的现有课程时才起作用,但如果我想提及的课程事先不知道,我就不能使用这项工作 - 周围。
答案 0 :(得分:-2)
我建议使用一些变量进行映射: -
class Foo{
a(){}
}
var class_map = {
"Foo" : Foo
}
var f = new class_map['Foo']()
Here它指定了
全局声明的类是全局变量,但不是属性 全球对象......
因此,您必须明确地映射
答案 1 :(得分:-2)
从https://stackoverflow.com/a/40069309/46395:
复制相关部分class Foo {
some_method() { return 42 }
}
let f = new(eval('Foo'));
console.log(f.constructor.name); // 'Foo'
f.some_method();
请提出原始答案。