2010-04-15 62 views
3

我目前有一个Javascript函数,它使用字符串引用对象名称并访问其属性。我目前使用eval()来获得所需的效果,我知道这是非常非常错误的。下面是我当前如何实现我想要的一个例子:使用字符串作为对象引用

var stringToObjectRef = function() { 

    var myTestVar = "myTestObject"; 
    var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 }; 

    var myValue = eval(myTestVar + '.item1'); 

    alert(myValue); 

}(); 

我使用像[myTestVar] .item1试过,但这个返回undefined。什么是正确的语法来实现这一目标?

在此先感谢。

回答

7

如果你在谈论的item1一部分,你正在寻找:

myValue = myTestObject["item1"]; 

不需要eval。 (几乎从来没有。)

如果你正在谈论使用“myTestObject”字符串获取myTestObject变量,那么你想要重构代码,所以你不这样做,而不是使用eval。不幸的是,该函数内用于符号解析的变量对象不能直接访问。该重构可以只使用一个对象明确:

var stringToObjectRef = function() { 

    var objects = {}; 

    var myTestVar = "myTestObject"; 
    objects.myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 }; 

    var myValue = objects[myTestVar].item1; 

    alert(myValue); 

}(); 

题外话,我不正因如此,召回,但如果你要立即执行该匿名函数那样,你需要把函数表达式括号:

var x = (function() { return 5; })(); 

而不是

var x = function() { return 5; }(); 

同样,我不记得为什么,以及它是否是因为在一个流行的解释或ACTUA实现的bug语法的要求。

+0

这正是我所追求的,谢谢!并感谢您的额外提示! – thesonglessbird 2010-04-15 10:30:37

0

试试这个:

var stringToObjectRef = function() { 
    var myTestObject = { 'item1' : 100, 'item2' : 12, 'item4' : 18 }; 
    var myValue = myTestObject['item1']; 
    alert(myValue); 
}(); 
+0

我正在寻找优化我的代码,所以我想删除我的代码中的所有eval()语句。我99.9%确定我不需要他们。 – thesonglessbird 2010-04-15 10:22:28

+0

@ user317362:你说得对。 :-) – 2010-04-15 10:22:50

+0

@thesonglessbird:看到我更新的答案。 – Sarfraz 2010-04-15 10:24:31

相关问题