Недавно я попытался использовать реализацию карты в javascript для создания набора элементов, а затем применить их к методу добавления объектов.
Во-первых, с использованием стандартной реализации болота.
var map = function (fn, a)
{
    for (i = 0; i < a.length; i++)
    {
        a[i] = fn(a[i]);
    }
}
Настройка.
var translateMenu = new Menu;
var languages = [ ['Chinese'   , 'zh-CN']
                , ['German'    , 'de']
                , ['French'    , 'fr']
                , ['Portugese' , 'pt']
                , ['Hindi'     , 'hi']
                ];
И моя функция... (не анонимная, поскольку она позже использовалась при добавлении translateMenu к mainMenu.)
var langItem = function (language, subMenu) 
    { 
       return new MenuItem(language[0], 'http://translate.google.com/translate?u=www.example.com&hl=en&ie=UTF-8&tl=en&sl=' + language[1] , "" , subMenu); 
    }
map ( langItem , languages );
Все это работало нормально, теперь у меня появился массив MenuItems.
Попытка вызова map( Menu.add , languages ) приведет к тому, что внутренние переменные меню будут undefined, а вызов не будет выполнен. 
Теперь я уверен, что это связано с объемом метода Menu.add(), поэтому я подумал, что если бы я прошел и в объекте, это могло бы сработать.
Я попытался создать новую функцию карты, которая будет принимать объекты и функции, но имела ту же ошибку undefined.
objMap (fn , obj , a) {
    for (i = 0; i < a.length; i++)
    {
        obj.fn(a);
    }   
}
objMap ( add , translateMenu , languages );   // failed
Я работал над этим, расширяя Menu с помощью addAll(), чтобы взять массив, который отлично работает...
Menu.prototype.addAll = function (items){
    for (i = 0; i < items.length; i++)
    {
        this.add(items[i]);
    }
}
translateMenu.addAll( languages ); // yay! but I want a more elegant solution.
Во всяком случае, мой вопрос: как я могу реализовать карту (или аналогичную общую функцию), чтобы фактически поддерживать методы объектов в качестве моих отображаемых функций?.
