2011-02-07 2 views
0

создать контекстное меню из массива, как это:Название функции от переменной в JavaScript,

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

Когда пользователь щелкает правой кнопкой мыши на веб-странице, появится меню с опциями ОПЦИЯ1 и 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 
     } 
    } 
]; 

EDIT # 1: Это плагин я использую jQuery ContextMenu Plugin

EDIT # 2: Мне это нужно, чтобы язык изменения с испанского на английский и наоборот.

ответ

1

Вы не можете использовать объектную буквальное обозначение для установки arbritrary свойства, как вы, кажется, попробовать во втором примере. Это не остановит вас от установки свойства Мануалы:

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() {...})] 
+0

Это именно то, что мне нужно. Благодаря! –

1

А что-то вроде:

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

Вы спрашиваете, если вы можете изменить ключ «OPTION1»: функция() {} к «option1»: функция() {}? Если это так, вы можете просто скопировать функцию в новую переменную onclick. Если то, о чем вы просите, это возможность вызывать что-то «option1» как строку, такую ​​как option1, но на самом деле вызывать OPTION1() {}, вы можете попробовать несколько разных вещей. Один из них можно сделать так, чтобы ваш массив был таким образом arr [{'name': 'option1', 'func': function() {}}] Тогда вы могли бы ссылаться на массив [0] .name и array [0] .func.

С вашим текущим кодом кажется, что вы продуваете свои функции со строками.

JS является очень выразительным, поэтому существует миллион способов сделать что-либо. Функции являются первоклассными объектами, поэтому их можно передавать как параметры и даже возвращать из функций.

Смежные вопросы