2011-04-13 90 views
6

我想从Javascript中获取其名称的对象。 我正在研究一个需要加载一些不同的上下文的应用程序,我想这样用“继承”jquery插件加载不同的类。一切正常,除此之外,当我需要实例化一个类时,我不能,因为我只有类的名称而不是直接的对象。从javascript中的字符串名称获取对象类

基本上,我想找到'getClass(String name)'之类的东西。有人可以帮助我吗?

+0

好吧,这是愚蠢的,但使用“的eval()函数在我的对象做的伎俩...... 对不起,我这个没用的帖子... – Celero 2011-04-13 08:19:26

回答

10

请勿使用eval()

你可以存储你的类中的地图:

var classes = { 
    A: <object here>, 
    B: <object here>, 
    ... 
}; 

,然后只是看看他们:

new classes[name]() 
+0

为什么用“的eval()的名称' 是错的 ?我不能这样做,我的“类”是通用的,必须加载在某些特定的上下文中,我不能加载这样的地图... – Celero 2011-04-13 08:52:58

+0

@Celero:因为可以使用eval()执行可能具有安全风险的任意代码。它提供了比你需要的更多的能量。为什么你不能使用地图?你对通用和你在说什么背景是什么意思?如果您提供更多信息,我们可以更好地饶你。 – 2011-04-13 08:57:24

+0

我真的错了,你的技巧可以根据需要应用。谢谢 ! – Celero 2011-04-13 09:04:29

5

JavaScript: Call Function based on String

function foo() { } 
this["foo"](); 
+0

这个,基本上和eval()一样,不是吗? – Celero 2011-04-13 08:55:34

+0

@Celero - no。以全局代码运行,* this *将引用gobal/window对象,因此相当于* window ['foo'] *。如果你在其他范围内使用它,你可能不知道* this引用了什么。它不**引用作用域的变量或激活对象(即执行上下文),这是你想要的,因为它位于变量解析链上的对象之上。 – RobG 2011-04-13 09:03:52

+0

好的,谢谢你的准确性。 – Celero 2011-04-13 09:11:41

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 
+0

不,我在其中一些类中继承了一些类,我只需要在特定情况下一次加载其中的一个类。这就是为什么eval()对我来说很好...... – Celero 2011-04-13 08:54:25

+0

@celero你能举个例子吗?也许有些代码? – wong2 2011-04-13 08:56:22

+0

对不起,我不能,无论如何,我要去尝试菲利克斯克林技术,看看...谢谢你的帮助 – Celero 2011-04-13 09:05:55

相关问题