2013-01-09 66 views
2

我想设置一个变量要么.prev().next(),例如:设置一个变量作为一个函数调用

if(x == y) 
     var shift = '.prev()'; 
    else 
     var shift = '.next()'; 

    $("li.active").removeClass('active')shift.addClass('active'); 

我大概可以得到它与eval()工作但它是一个安全隐患。

我错过了一些明显的东西吗?

回答

5

对象的每个属性都可以通过使用bracket notation [spec]来访问。
foo.bar()相同foo['bar']()

if(x == y) 
    var shift = 'prev'; 
else 
    var shift = 'next'; 

// or a shorter and nicer way: 
// var shift = x == y ? 'prev' : 'next'; 

$("li.active").removeClass('active')[shift]().addClass('active'); 
+0

'shift'声明超出范围,不是吗? – Madbreaks

+2

@Madbreaks:不。JavaScript只有函数范围。 –

+0

有趣。好的,但是'var shift = x === y怎么样?上一个:下一个;':) – Madbreaks