I recently tried to use an implementation of map in javascript to create a bunch of items, then apply them to an objects add method.
Firstly with a bog standard implementation of map.
var map = function (fn, a)
{
for (i = 0; i < a.length; i++)
{
a[i] = fn(a[i]);
}
}
Setup.
var translateMenu = new Menu;
var languages = [ ['Chinese' , 'zh-CN']
, ['German' , 'de']
, ['French' , 'fr']
, ['Portugese' , 'pt']
, ['Hindi' , 'hi']
];
And my function... (not anonymous, as it's later used when adding the translateMenu to 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 );
This all worked fine, I now had an array of MenuItems to throw around.
Trying to call map( Menu.add , languages )
would result in internal variables of Menu being undefined, and the call failing.
Now I'm certain this has to do with the scope of the Menu.add()
method, so i thought if I passed in the object as well, it might work.
I tried creating a new map function that would accept objects and functions, but had the same undefined error.
objMap (fn , obj , a) {
for (i = 0; i < a.length; i++)
{
obj.fn(a);
}
}
objMap ( add , translateMenu , languages ); // failed
I worked around this by extending Menu with addAll() to take an array, which works fine...
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.
Anyway, my question is, how could I implement map (or a similar generic function) to actually support using object methods as my mapped functions?.