【问题标题】:Is it possible to use a variable as a function name是否可以使用变量作为函数名
【发布时间】:2012-12-02 19:26:23
【问题描述】:

我有一个上下文菜单,它将单击的菜单项作为变量中的值返回,就像这样。

var m = key;

变量可以是我编程的任何东西,例如;编辑、剪切、粘贴或任何我想要的。

是否可以将此变量用作函数名? 例如:函数 m() 其中 m 可以是变量的内容。

任何建议将不胜感激。

谢谢

克里斯

【问题讨论】:

  • 我假设你想要像 var m = function () { } 这样的东西,这是完全正常的。
  • window[key]() 怎么样?不用说,这通常不是必需的。
  • 我读到m包含一个字符串如“edit”,然后他想从变量m中定义一个名为edit的函数。
  • 凯文,这正是我想要做的 :) 有可能吗?

标签: javascript variables contextmenu var


【解决方案1】:

你可以用你需要的函数创建一个对象,然后使用变量来调用函数:

var funcs = {
   "cut": function(){
      console.log("Cutting");
    },
    "paste": function(){
      console.log("Pasting");
    }
};

var m = "cut";
funcs[m]();

http://jsfiddle.net/WVBNV/

【讨论】:

  • 最好不要使用window 来存储函数;-)
  • 即使在不需要时引用文字键有什么好处吗?
  • @Jan Dvorak,我这样做主要是因为我使用class 被烧毁了,这是一个保留字太多次(IE 不喜欢这个)。但我相信它也是规范的一部分:stackoverflow.com/questions/949449/…
  • @KevinBowersox 该规范指的是 JSON,而不是对象文字。我同意对关键字的谨慎。
【解决方案2】:

当然可以!

var onComplete = fadeOut;

function fadeOut(){
   $(this).animate({
      opacity: "0"
   },400);
}

巧合的是,您也可以使用这种方式来伪生成类。

function myClass(){
    this.publicVar = "" //<-- this is a public var
    var privateVar = ""; //<-- this is private

   this.myPublicMethod = myPublicMethod;

   function myPublicMethod(){ // <-- public because of the line above

   } 

   function _myPrivateMethod(){ // <-- if just this it's private

   }

}

【讨论】:

  • 可能是错误的,但是您在定义 fadeOut 之前将 fadeOut 分配给 onComplete 所以我认为这不会起作用。更不用说这根本与这个问题无关。
  • 不正确,我将它分配给内存,但应该在事后调用它。注释掉最后一行,它会工作。 jsfiddle.net/biscuitcleaver/kmgvn 第二个代码块是对第一个代码块的推断。您可以将变量分配给函数以将它们暴露在原始函数之外,从而形成一种面向对象的方法。
【解决方案3】:

另一种方式

function my_generic_function(m) {
    switch (m) {
    case "cut":
        console.log("cutting");
        break;
    case "copy":
        console.log("copying");
        break;
    default:
        return false;

    }
}

var m = "cut";
my_generic_function(m);

var m = "copy";
my_generic_function(m);
​

【讨论】:

  • 我喜欢你的回答。我是 jquery 的新手,所以简单最适合我。它也是一种自我记录。
  • @Chris 我的解决方案和 Atif 都使用纯 JavaScript。我会敦促你在转向 jquery 之前学习 JS 的基础知识。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多