3

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?

3
  • 3
    whats wrong with your try above? Commented Sep 5, 2013 at 4:37
  • 1
    what you have is working fine. what's wrong with it? Commented Sep 5, 2013 at 4:45
  • sorry, i just wrote it without proper test. it actually , working,.. huhuhu ty.. :D Commented Sep 5, 2013 at 7:21

3 Answers 3

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

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
Sign up to request clarification or add additional context in comments.

Comments

4

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.

Comments

3

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');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.