从javascript中的字符串名称获取对象类

时间:2011-04-13 08:16:59

标签: javascript string class object get

我想在Javascript中从其名称中获取一个对象。 我正在开发一个需要加载一些不同上下文的应用程序,我正在尝试使用“inherit”jquery插件加载不同的类。一切都运行得很好,除了那些,当我需要实现一个课我不能,因为我只有类的名称,而不是直接的对象。

基本上,我想找到像'getClass(String name)'这样的东西。有人能帮助我吗?

4 个答案:

答案 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