Javascript中变量的函数名称

时间:2011-02-07 20:18:18

标签: javascript

我从这样的数组创建一个上下文菜单:

var menu1 = [
   {
      'OPTION1':function(menuItem,menu) {
         // code for OPTION1
      }
   },
   {
      'OPTION2':function(menuItem,menu) {
         // code for OPTION2
      }
   }
];

当用户右键点击我的网页时,会出现一个菜单,其中包含OPTION1和OPTION2选项。

我需要动态更改函数名称,因为它是上下文菜单选项文本。 有没有办法将函数名称声明为变量?

这就是我想要的:

var optionsletters = {};
optionsletters['option1'] = 'option_one';
optionsletters['option2'] = 'option_two';

var menu1 = [
   {
      optionsletters['option1']:function(menuItem,menu) {
         // code for OPTION1
      }
   },
   {
      optionsletters['option2']:function(menuItem,menu) {
         // code for OPTION2
      }
   }
];

编辑#1:这是我一直使用的插件jQuery ContextMenu Plugin

编辑#2:我需要这样才能允许将语言从西班牙语改为英语,反之亦然。

3 个答案:

答案 0 :(得分:1)

如下:

var name = 'option_one',
    optionsletters = {};
optionsletters[name] = function() { ... };

答案 1 :(得分:1)

您不能像在第二个示例中尝试那样使用对象文字表示法来设置任意属性。这并不会阻止您手动设置属性:

function make_menu_item(name, func){
    var item = {};     //Create an empty object
    item[name] = func; //Assign the property with the name you choose
                       //(obj['option1'] is equivalent to obj.option1 in Javascript)
    return item;
}

var menu = [
     make_menu_item('option1', function () {...}),
     make_menu_item('option2', function () {...})]

答案 2 :(得分:0)

您是否在询问是否可以将“OPTION1”:function(){}更改为“option1”:function(){}?如果是这样,您只需将该函数复制到新变量onclick。如果您要求的是能够将某个'option1'称为类似option1的字符串,但实际上调用OPTION1(){}您可以尝试一些不同的东西。一个你可以使你的数组​​如此arr [{'name':'option1','func':function(){}}]然后你可以引用array [0] .name和array [0] .func。

使用您当前的代码,您似乎正在使用字符串来消除您的功能。

JS非常富有表现力,所以有一百万种方法可以做任何事情。函数是第一类对象,因此可以作为参数传递,甚至可以从函数返回。