我想在Javascript中从其名称中获取一个对象。 我正在开发一个需要加载一些不同上下文的应用程序,我正在尝试使用“inherit”jquery插件加载不同的类。一切都运行得很好,除了那些,当我需要实现一个课我不能,因为我只有类的名称,而不是直接的对象。
基本上,我想找到像'getClass(String name)'这样的东西。有人能帮助我吗?
答案 0 :(得分:11)
请勿使用eval()
。
您可以将您的课程存储在地图中:
var classes = {
A: <object here>,
B: <object here>,
...
};
然后查看它们:
new classes[name]()
答案 1 :(得分:5)
JavaScript: Call Function based on String:
function foo() { }
this["foo"]();
答案 2 :(得分:1)
您可以完美使用eval()
,而不会带来安全风险:
var _cls_ = {}; // serves as a cache, speed up later lookups
function getClass(name){
if (!_cls_[name]) {
// cache is not ready, fill it up
if (name.match(/^[a-zA-Z0-9_]+$/)) {
// proceed only if the name is a single word string
_cls_[name] = eval(name);
} else {
// arbitrary code is detected
throw new Error("Who let the dogs out?");
}
}
return _cls_[name];
}
// Usage
var x = new getClass('Hello')() // throws exception if no 'Hello' class can be found
优点:您不必手动管理地图对象。
缺点:无。使用适当的正则表达式,没有人可以运行任意代码。
答案 3 :(得分:0)
function Person(name){
this.name = name;
}
function getClass(str_name, args){
return new (window[str_name])(args);
}
var wong2 = getClass("Person", "wong2");
alert(wong2.name); // wong2