如何通过变量名称调用函数

时间:2013-06-10 14:10:35

标签: javascript jquery html

我的问题有点复杂,但我会尽力说出来。

我正在建立一个涉及大量JavaScript的网站。我没有设置所有设置,所以一些脚本没有与任何东西连接。我想创建一个弹出控制台,允许我输入我希望计算机执行的功能,并让计算机这样做。

  1. 我可以使用变量然后使用该变量示例调用函数:

    var CodeApprentice = "Cat";
    function Cat(){
      document.write("kitten");
    } 
    function Dog(){
      document.write("puppy");
    }
    //Here is were I want to call the function with the variable   CodeApprentice   
    // and have it do the cat function
    function CodeApprentice();
    
  2. 我知道我没有正确地做到这一点,但是一种方法还是我只是疯了

4 个答案:

答案 0 :(得分:3)

您可以将所有可用功能存储在对象中

var availableFunctions {
  cat: correspondingFunction
}

然后你可以输入一个字符串

var input = 'cat';

availableFunctions[input]();

答案 1 :(得分:1)

使用.call.apply

var codeApprentice = Cat;

codeApprentice.call(null);

你可以拥有一个更清洁的解决方案,其中包含更好的成分

// my_class.js
var MyClass = function() {};

MyClass.Cat = function() {
  document.write("kitten");
};

MyClass.Dog = function() {
  document.write("puppy");
};

// usage
var codeApprentice = "Cat";
MyClass[codeApprentice].call(null);
// => "kitten"

这是一个带有一些HTML控件的fiddle

答案 2 :(得分:1)

您可以通过点符号

以两种方式访问​​对象的任何属性
obj.propertyName

或使用属性名称作为键

obj["propertyName"]

您在全局名称sapce中定义的任何函数都将成为全局对象的一部分,因此在您的情况下可以执行

//this is meant as a to the global object other names might be appropriate
//such as window depending on the context
this[CodeApprentice]()

执行功能Cat

写作

function Cat() {
}

相当于

Cat = function(){
}

后者更明确地表明它实际上是this被设置的属性(我没有说它显然只是隐藏了比前一个更少的事实)

作为最后的注释,一般惯例是以大写字母开头的函数是构造函数,应该使用新的关键字调用,例如new Cat()因为在这种情况下可能不是你想要的,你应该考虑重命名函数(如果实际代码的函数以大写字母开头)

答案 3 :(得分:0)

你可以这样做,甚至可以传递参数

var strFun = "Cat";
var strParam = "";

//Create the function
var fn = window[strFun];

//Call the function
fn(strParam);

或者你可以使用eval()这样的功能

来实现
var strFun = "Cat";
var strParam = "";

//Create the function call from function name and parameter.
var funcCall = strFun + "('" + strParam + "');";

//Call the function
var ret = eval(funcCall);