Ich habe vor kurzem versucht, eine Implementierung der Karte in Javascript verwenden, um eine Reihe von Elementen zu erstellen, dann gelten sie für ein Objekt hinzufügen Methode.
Erstens mit einer Standardimplementierung von map.
var map = function (fn, a)
{
for (i = 0; i < a.length; i++)
{
a[i] = fn(a[i]);
}
}
Einrichten.
var translateMenu = new Menu;
var languages = [ ['Chinese' , 'zh-CN']
, ['German' , 'de']
, ['French' , 'fr']
, ['Portugese' , 'pt']
, ['Hindi' , 'hi']
];
Und meine Funktion... (nicht anonym, da sie später beim Hinzufügen des translateMenu zu mainMenu verwendet wird).
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 );
Dies alles funktionierte gut, ich hatte jetzt ein Array von MenuItems um zu werfen.
Versuchen Sie anzurufen map( Menu.add , languages )
würde dazu führen, dass interne Variablen von Menu undefiniert sind und der Aufruf fehlschlägt.
Ich bin mir sicher, dass dies mit dem Umfang der Arbeit zu tun hat. Menu.add()
Methode, also dachte ich, wenn ich das Objekt auch übergebe, könnte es funktionieren.
Ich habe versucht, eine neue Map-Funktion zu erstellen, die Objekte und Funktionen akzeptieren würde, aber ich hatte den gleichen undefinierten Fehler.
objMap (fn , obj , a) {
for (i = 0; i < a.length; i++)
{
obj.fn(a);
}
}
objMap ( add , translateMenu , languages ); // failed
Ich umging dies, indem ich Menu mit addAll() erweiterte, um ein Array zu nehmen, was gut funktioniert...
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.
Wie auch immer, meine Frage ist, wie könnte ich map (oder eine ähnliche generische Funktion) implementieren, um die Verwendung von Objektmethoden als meine zugeordneten Funktionen zu unterstützen? .