我想在另一个函数中动态运行一个函数......
让我们说:
<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...
我怎么能这样做?
我想在另一个函数中动态运行一个函数......
让我们说:
<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...
我怎么能这样做?
您可以根据需要简单地测试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
通过在调用它时将函数的名称作为第一个参数传递给 x。
x(a, {}); // alert("aA");
x(b, {}); // alert("bB");
请注意,您传递的是对函数的引用,而不是字符串。这是因为 JavaScript 中的函数是对象,并且通过引用而不是值传递。所以var a = function() {...};实际上意味着变量 a 持有对该函数的引用。
你的意思是:
var x = function(r,s){
window[r](s);
}
var a = function(item){
alert("aA");
}
var b = function(item){
alert("bB:" + item);
}
x('b', 'test');