0

非常感谢阅读,

问题背景:在多个手风琴面板中使用 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)被叫。有没有办法ds1.filter(filterFunc)被调用eval或替代(Jquery?)?非常感谢恐龙

4

4 回答 4

4

你应该使用这个:

eval(result + ".filter(filterFunc)");

但是你真的应该考虑根本不 eval考虑。我不明白为什么这会是可取的。如果必须,我建议将要操作的变量存储在已知位置。例如:

​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();

小提琴

(您也可以以window这种方式存储它,但我也建议不要这样做。)

于 2012-12-30T08:41:51.750 回答
3

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

var result = 'ds1';

window[result].filter(filterFunc);
于 2012-12-30T08:42:40.270 回答
1

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

eval (result+".filter(filterFunc)");

于 2012-12-30T08:41:42.527 回答
0

您不需要将 eval 用于执行完全任意代码之外的任何事情。

您可能希望将XMLDataSets 存储在数组中。

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);
}
于 2015-06-20T22:51:48.863 回答