У меня есть следующий (упрощенный) объектный литерал.Метод icons использует замыкание, чтобы скрыть переменную icons, которую я хотел бы иметь в качестве ассоциативного массива для последующих поисков.
var MapListings = {
icons: function () {
var allIcons = [] ;
return {
add: function (iconType, iconImage) {
var icon = new GIcon(MapListings.baseIcon);
icon.image = iconImage;
allIcons[iconType] = icon; // fails, but this is what I want
// allIcons.push(icon); // works, but this is not what I want
},
get: function () {
return allIcons;
}
};
} ()
}
Я добавляю элементы в объект icons следующим образом:
MapListings.icons.add("c7", "/images/maps/blue.png");
MapListings.icons.add("c8", "/images/maps/red.png");
Следующее не работает:
allIcons[iconType] = icon;
Но это работает:
allIcons.push(icon);
За пределами замыкания стиль ассоциативного массива работает нормально, так что, возможно, естьконфликт с jQuery?Ошибка, которую я получаю в firebug a, не определена , похоже, исходит из библиотеки.Я бы хотел сохранить стиль ассоциативного массива.
Есть идеи?
Обновление
Похоже, этот конфликт исходит от карт Google.Странно, но я не уверен, что можно обойти это.
Dumbass Update
Часть моего литерала объекта, которая возвращала базовый объект GIcon (), не возвращала объектсовсем.Таким образом, у объекта не было нужных свойств.
baseIcon: function () {
var base = new GIcon();
base.shadow = '/images/maps/shadow.png';
base.iconSize = new GSize(12, 20);
base.shadowSize = new GSize(22, 20);
base.iconAnchor = new GPoint(6, 20);
base.infoWindowAnchor = new GPoint(5, 1);
return base;
}
И MapListings.baseIcon НЕ совпадает с MapListings.baseIcon ()!D'о