У меня есть следующий (упрощенный) литерал объекта. Метод значков использует закрытие, чтобы скрыть переменную значков, которую я хотел бы иметь в качестве ассоциативного массива для последующих поисков.Javascript object literal: почему я не могу это сделать?
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;
}
};
}()
}
добавить детали к иконам объекта следующим образом:
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 не определена выглядит из библиотеки. Я бы хотел поддерживать стиль ассоциативного массива.
Любые идеи?
Update
Похоже, что этот конфликт происходит из карт 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'о
Я только что вставил это в HTML-файл и заменить GIcon с помощью заполнителя. похоже, хорошо работает. Возможно, ошибка находится в объекте GIcon, а не в коде. Я запускаю Firefox 3.5 в Linux. – Gennadiy
Вы уверены, что ошибка «a isdefined» связана с этим кодом? – Jacob
@gennaidiy - GIcon с карт Google. Это не тот объект GIcon, который создает конфликт, но он выглядит как библиотека карт google. – ScottE