admin管理员组

文章数量:1424893

i want to run a function, inside another function dynamically...

let say :

<script>
var x = function(r,s){
    r(s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB");
}
</script>

is this possible? i take "r" from function x's argument as a function name, and i want to run it.

if r=a, then it will trigger function a()

and if r=b, function b triggered instead...

how could i do that?

i want to run a function, inside another function dynamically...

let say :

<script>
var x = function(r,s){
    r(s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB");
}
</script>

is this possible? i take "r" from function x's argument as a function name, and i want to run it.

if r=a, then it will trigger function a()

and if r=b, function b triggered instead...

how could i do that?

Share Improve this question edited Jun 20, 2020 at 9:12 CommunityBot 11 silver badge asked Sep 5, 2013 at 4:34 dwerty_weirddwerty_weird 1934 silver badges17 bronze badges 3
  • 3 whats wrong with your try above? – RienNeVaPlu͢s Commented Sep 5, 2013 at 4:37
  • 1 what you have is working fine. what's wrong with it? – Praveen Lobo Commented Sep 5, 2013 at 4:45
  • sorry, i just wrote it without proper test. it actually , working,.. huhuhu ty.. :D – dwerty_weird Commented Sep 5, 2013 at 7:21
Add a ment  | 

3 Answers 3

Reset to default 5

You could simply test r and call each function as needed.

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

Or, if you have many functions for this or don't always know them all ahead of time, you can organize them in an Object and use bracket operators to treat r as a key name to access them:

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

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

var x = function (r, s) {
    var mand = mands[r];

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

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

Or, even just pass a and b as the arguments themselves with your current definition of x().

x(a, 'foo'); // calls `a` as `r`, passing 'foo' along

By passing the name of the function as the first parameter to x when calling it.

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

Note that you're passing the reference to the function, not a string. This is because functions in JavaScript are objects and are passed by reference, not by value. So var a = function() {...}; actually means that variable a holds a reference to the function.

you mean like:

var x = function(r,s){
    window[r](s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB:" + item);
}
x('b', 'test');

本文标签: