我有以下(简化的)对象字面量。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;
}
};
} ()
}
我这样向图标对象添加项目:
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未定义似乎来自库。我想保持关联数组样式。
有什么想法吗?
更新
看起来这个冲突来自谷歌地图。奇怪,不确定有没有绕过这种方式。
蠢蛋更新
我的对象文字的一部分返回了一个基本的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()!这真是个大失误。
allIcons[iconType] = icon
失败时,这个赋值操作具体是哪里出了问题?这只是一个简单的对象赋值,我不明白它怎么会失败。你确定这就是导致异常的地方吗?请设置断点并逐步执行代码以获取更多信息。 - Anurag