javascript eval()能否在使用之前获取变量名称并替换它们

javascript eval()能否在使用之前获取变量名称并替换它们,javascript,jquery,spry,Javascript,Jquery,Spry,非常感谢您的阅读 问题背景:在多个手风琴面板中使用spry的搜索功能 我试图使用eval(因为这是我能想到的唯一方法)来完成这件简单的事情: var ds1 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz1.php",'root/row]'); var ds2 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz2.php",'root/row]'); var str1="ds"; var str2= 1; v

非常感谢您的阅读

问题背景:在多个手风琴面板中使用spry的搜索功能

我试图使用
eval
(因为这是我能想到的唯一方法)来完成这件简单的事情:

var ds1 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz1.php",'root/row]');

var ds2 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz2.php",'root/row]');

var str1="ds";

var str2= 1;

var result= str1.concat(str2);

//result is now ds1

eval ("result.filter(filterFunc)");
我希望调用
ds1.filter(filterFunc)
,但调用
result.filter(filterFunc)
。 是否有一种方法可以使用
eval
或替代方法(Jquery)调用
ds1.filter(filterFunc)
? 非常感谢
Dinos

要使用
result
的值而不是
“result”
本身,您可以执行以下操作:


eval(结果+”.filter(filterFunc)”

您应该使用以下选项:

eval(result + ".filter(filterFunc)");
<>但你确实应该考虑不要<代码> EVA<代码> ING。我不明白为什么这样做是明智的。如果必须,我建议将要操作的变量存储在已知位置。例如:

​var Foo = function() {
    return {
        "bar": function() {
            console.log("baz");
        }
    }
};

var foo_list = {};
foo_list["foo"] = Foo();

var part_1 = "fo";
var part_2 = "o";

foo_list[part_1 + part_2].bar();


(您也可以通过这种方式将其存储在
窗口中,但我也建议不要这样做。)

如果您尝试访问的变量在全局范围内,则可以使用:

var result = 'ds1';

window[result].filter(filterFunc);

除了执行完全任意的代码之外,您不需要使用eval

您可能希望将
XMLDataSet
s存储在一个数组中

var datasets = [];
for (var n=1; n<=2; n++) {
    datasets.push(new Spry.Data.XMLDataSet("ajaxxmllogdaneiz" + n + ".php", "root/row"));
}

for (var i=0; i<datasets.length; i++) {
    var ds = datasets[i];
    ds.filter(filterFunc);
}
var数据集=[];

对于(var n=1;n非常感谢。我尝试过组合,但我认为eval()不允许在内部进行字符串合并。再次非常感谢。我的荣幸。请注意,您可以将任何解析为字符串的内容传递给
eval()
-无论是串联还是
toString())
call,一个返回字符串的函数调用,一个返回字符串的字符串方法,等等。非常感谢您的建议和对主题Waleed的详细阐述。