当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数?
如何使用作为参数传递的函数名 例如:当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数?,javascript,jquery,function,hide,show,Javascript,Jquery,Function,Hide,Show,如何使用作为参数传递的函数名 例如: showError('container', 'id', '- message', 'show'); showError('container', 'id', '', 'hide'); function showError(container, id, msg, action) { if(action == 'show') { $('#' + container).show(); $('#
showError('container', 'id', '- message', 'show');
showError('container', 'id', '', 'hide');
function showError(container, id, msg, action)
{
if(action == 'show') {
$('#' + container).show();
$('#' + id).html(msg).show();
}
else {
$('#' + container).hide();
$('#' + id).html(msg).hide();
}
}
obj.foo实际上是一个两步走的东西。foo返回一个函数对象,然后执行它。obj['foo']返回相同的函数对象,因此添加一个来执行它
因为obj['foo']与obj.foo相同。即使该属性上的值是函数。因此,您可以始终使用[]访问器访问任何属性,使用字符串作为键名
$('#' + container)[action]();
用于通过字符串访问相应的方法:
function showError(container, id, msg, action) {
$('#' + container)[action]();
$('#' + id).html(msg)[action]();
}
然而,您的方法看起来很奇怪。我建议将操作限制为两个值,并自动执行:
function showError(container, id, msg) {
var action = msg=='' ? 'hide' : 'show';
$('#' + container)[action]();
$('#' + id).text(msg)[action]();
}
在一般情况下,括号表示法是好的。在您的情况下,请使用切换:
甚至正如Bergi所说:
function showError(container, id, msg)
{
$('#' + container).toggle(!!msg);
$('#' + id).html(msg);
}
它使用了我自己的发明,双重爆炸!!,将真实值或虚假值转换为布尔值的等效值。请尝试eval@LosManos:-1。在链接之前,然后不要这样做。@Bergi:是吗?我试着说eval是一种选择,但不必写文本来解释它的优缺点。不过,其他答案要好得多——因此只有一条评论。
function showError(container, id, msg)
{
$('#' + container).toggle(!!msg);
$('#' + id).html(msg);
}