使用字符串调用javascript函数

Calling a javascript function with a string?

本文关键字:javascript 函数 调用 字符串      更新时间:2023-09-26

我有一个函数:

var greet = function (name) {
    console.log("Hi " + name);
}

如果我有一个字符串"greet('eric'(",是否可以将其转换为传递"eric"作为参数的函数调用?

eval((是你的朋友!http://www.w3schools.com/jsref/jsref_eval.asp

你、我、他、她和他们都讨厌eval。总有另一种方法。

callMethod = function(def) {
    //all the variables are function references
    var approvedMethods = {greet: greet, love: love, marry: marry, murder: murder, suicide: suicide},
        split = def.split(/'(/); //split[0] contains function name, split[1] contains (unsplit) parameters
    //replace last ) and all possible string detonators left-over
    split[1] = split[1].replace(/')$/, '').replace(/['''"]/g, '').split(','); //contains list of params
    if (!approvedMethods[split[0]])
        return 'No such function.';
    approvedMethods[split[0]].apply(window, split[1]);
}
//Called like this:
callMethod("greet('eric')");

将窗口引用替换为任意内容。

我不确定我是否正确理解了你的问题,但你在寻找eval((函数吗?

eval("greet('eric')");

这就像键入一样简单

eval("greet('eric')");

eval

var greet = function (name) {
      console.log("Hi " + name);
    },
    greetstr = 'greet("Eric")';
var greeter = greetstr.split('("');
window[greeter[0]]( greeter[1].replace(/')|"/g,'') );

底线1:小心使用eval
底线2:避免这样的构造。

只是为了确保你有所有的可能性@你的处置:setTimeout(greetstr,0);
Mmm,在那里的某个地方有一个eval;(