Calling javascript function with an objectstring in dot notation

前端 未结 3 1689
灰色年华
灰色年华 2021-02-20 17:14

Suppose I have the string:

var string = \"function\";

With

window[string];

I can call a function with the nam

相关标签:
3条回答
  • 2021-02-20 17:39

    you can split the string across . by using the String.split method:

    var string2 = "function.method.weHaveTogoDeeper";
    var methods = string2.split(".");
    

    In this examples, methods will be the array ["function","method","weHaveTogoDeeper"]. You should now be able to do a simple iteration over this array, calling each function on the result of the previous one.

    Edit

    The iteration I had in mind was something like this:

    var result = window;
    for(var i in methods) {
        result = result[methods[i]];
    }
    

    In your example, result should now hold the same output as

    window["function"]["method"]["weHaveTogoDeeper"]
    
    0 讨论(0)
  • 2021-02-20 17:39
    function index(x,i) {return x[i]}
    string2.split('.').reduce(index, window);
    

    edit: Of course if you are calling functions from strings of their names, you are likely doing something inelegant which would be frowned upon, especially in a collaborative coding settings. The only use case I can think of that is sane is writing a testing framework, though there are probably a few more cases. So please use caution when following this answer; one should instead use arrays, or ideally direct references.

    0 讨论(0)
  • 2021-02-20 17:46

    I wrote one a while back:

    function RecursiveMapper(handlerName, stack) {
        // check if empty string
        if(!handlerName || handlerName === '' || (handlerName.replace(/\s/g,'') === '')) return null;
    
        var buf = handlerName.split('.');
        stack = stack || window;
        return (buf.length === 1) ? stack[buf[0]] : this.RecursiveMapper(buf.slice(1).join('.'), stack[buf[0]]);
    }
    

    Call it like this: RecursiveMapper(window[string2]);

    This one also checks if the function is defined in window scope first and returns the global one fi found.

    0 讨论(0)
提交回复
热议问题