如何通过函数参数,在JavaScript函数中触发另一个JavaScript函数?

3
我想在另一个函数内动态地运行一个函数...
比如说:
<script>
var x = function(r,s){
    r(s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB");
}
</script>

这可能吗?
我从函数x的参数中提取“r”作为一个函数名称,并希望运行它。
如果r=a,则会触发函数a()。
如果r=b,则会触发函数b()...
我该怎么做?

3
你之前尝试的有什么问题? - RienNeVaPlu͢s
1
你现在的代码运行良好,有什么问题吗? - Praveen Lobo
抱歉,我只是草率地写了它,没有进行适当的测试。实际上它是工作的...呼呼呼,谢谢 :D - dwerty_weird
3个回答

5
您可以简单地测试r,并根据需要调用每个函数。
if (r === 'a') {
    a(s);
} else if (r === 'b') {
    b(s);
}

如果您有许多此类功能或者不总是提前知道它们所有的功能,您可以将它们组织在一个对象中,并使用方括号操作符r作为键名来访问它们:

var commands = {
    a: function(item){
        alert("aA");
    },

    b: function(item){
        alert("bB");
    }
};

var x = function (r, s) {
    var command = commands[r];

    if (typeof command === 'function') {
        command(s);
    }
};

x('a', 'foo'); // alerts `aA`

或者,甚至只需像您当前定义的一样将ab本身作为参数传递。
x(a, 'foo'); // calls `a` as `r`, passing 'foo' along

4
通过在调用x函数时将函数名称作为第一个参数传递给它。
x(a, {}); // alert("aA");
x(b, {}); // alert("bB");

请注意,您传递的是函数的引用,而不是字符串。这是因为JavaScript中的函数是对象,并且是按引用而非按值传递的。因此,var a = function() {...};实际上意味着变量a持有对该函数的引用。

3
你的意思是像这样吗:
var x = function(r,s){
    window[r](s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB:" + item);
}
x('b', 'test');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接