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...

我怎么能这样做?

4

3 回答 3

5

您可以根据需要简单地测试r和调用每个函数。

if (r === 'a') {
    a(s);
} else if (r === 'b') {
    b(s);
}

或者,如果您有很多功能,或者并不总是提前知道它们,您可以将它们组织在一个中Object并使用括号运算符将其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`

或者,甚至只是将aandb作为参数本身与您当前对 . 的定义一起传递x()

x(a, 'foo'); // calls `a` as `r`, passing 'foo' along
于 2013-09-05T04:39:56.037 回答
4

通过在调用它时将函数的名称作为第一个参数传递给 x。

x(a, {}); // alert("aA");
x(b, {}); // alert("bB");

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

于 2013-09-05T04:39:26.507 回答
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');
于 2013-09-05T04:39:28.723 回答