我最近尝试在javascript中使用map的实现来创建一堆项目,然后将它们应用到对象添加方法。在JavaScript中实现支持对象方法为映射函数的地图?
首先用map的bog标准实现。
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)
会导致Menu的内部变量未定义,并且调用失败。
现在我确定这与Menu.add()
方法的范围有关,所以我想如果我也传入对象,它可能会工作。
我试着创建一个新的地图函数,它可以接受对象和函数,但有相同的未定义错误。
objMap (fn , obj , a) {
for (i = 0; i < a.length; i++)
{
obj.fn(a);
}
}
objMap (add , translateMenu , languages); // failed
我工作围绕这通过扩展菜单的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.
不管怎样,我的问题是,我怎么能实现地图(或一个类似的泛型函数)实际上支持使用对象方法作为我的映射函数?。
谢谢,这是一个很棒的答案。 :d – garrow 2009-02-25 22:35:32