Javascript 对对象变量调用方法

Javascript 对对象变量调用方法,javascript,jquery,global-variables,eval,global,Javascript,Jquery,Global Variables,Eval,Global,我想我有一个关于全局变量的问题 我有以下代码: $('span.ion-chevron-left, span.ion-chevron-right').click(function() { var myIterator = $(this).attr('data-iterator'); ('ion-chevron-right' == $(this).attr('class')) ? window[myIterator].next() : window[myIterator].p

我想我有一个关于全局变量的问题

我有以下代码:

$('span.ion-chevron-left, span.ion-chevron-right').click(function() {

    var myIterator  = $(this).attr('data-iterator');

    ('ion-chevron-right' == $(this).attr('class')) ? window[myIterator].next() : window[myIterator].prev();

    if(!window[myIterator].valid()) {

      (window[myIterator].key() == window[myIterator].getTotal()) ? window[myIterator].rewind() : window[myIterator].end();

    }

    // do something

});
您需要知道变量myIterator包含一个字符串,如“myIterator1”、“myIterator2”、“myIterator3”

正如你所看到的,我想避免冗余。我不想写这样的东西:

if('myIterator1' == myIterator) { ... }
if('myIterator2' == myIterator) { ... }
因此,我试图通过编写window[myIterator].method来调用不同迭代器对象上的方法

这样做对吗?我认为使用eval是可能的,但我知道eval是邪恶的,所以有区别吗?或者如何解决这类问题?我当前的代码中是否存在任何安全问题


最好的问候

您的一般方法是合理的,但是您应该通过将迭代器放在专用对象中来避免污染全局名称空间。例如,使用iteratorDict[myIterator]代替window[myIterator],iteratorDict由定义

var iteratorDict = {
    "myIterator1": ...,
    "myIterator2": ...,
    ...
}

或者,如果您不想像那样一次定义所有这些变量,只需更改定义var myIterator1=。。。我非常喜欢你的答案。我是这样执行你的建议的:var itDict=新对象;itDict['foo']=。。。访问:itDict[myIterator]。下一步;我希望这是一个良好的实践,而不是一个关键的实施。多谢各位@用户3180943是的,看起来不错。您可以缩短var itDict=新对象;简单地将变量itDict={};如果你愿意的话。