0

几年前我曾在 google map api 上工作过,并写了一个可重用的实用程序。那时添加 google map api 参考确实会在页面的全局命名空间中添加所有 api 类。因为这是工作样本

<script src="http://maps.google.com/maps?SOMEPARAMETERS">
<script>
var map= new GMap2(document.getElementById("map_canvas"));
var point= new LatLng(31,75);
var line= new Polyline(OPTIONS);
</script>

在 v3 中,所有 Google Maps JavaScript API 代码都存储在 google.maps.* 命名空间中,而不是全局命名空间中。作为此过程的一部分,大多数对象也已重命名,并进行了更多更改。

现在你必须编写上面的代码如下

<script src="APIURL">
<script>
var map= new google.map.Map(document.getElementById("map_canvas"));
var point= new google.mapLatLng(31,75);
var line= new google.map.Polyline(OPTIONS);
</script>

问题

我在 Google v2 API 时代编写了一个库,并在许多项目中使用过,并且运行良好。但现在我正在开发一个新项目并使用 Google V3 API 并希望重用那个旧的 v2 库。但是添加 v3 库不会在全局命名空间中添加 API 类,并且我的库不起作用。有什么方法可以像我们在 C# 中那样将命名空间添加到我们的 JavaScript 文件中,它允许我们在不附加命名空间的情况下编写类

4

1 回答 1

1

您也许可以只使用参考:

(function() { // A scoping function to avoid creating glboals
    var GMap2 = google.map.Map;
    var LatLng = google.map.LatLng;
    var Polyline = googlemap.Polyline;


    // ...your code using the above here...
})();

不过,这是假设论点没有改变。

或者,您可以使用 Facade 模式:

function GMap2(/*...relevant args...*/)

    return new google.map.Map(/*...relevant args here, possibly modified...*/);
}

(其他人也类似。)

(即使您使用newwith也有效,GMap2因为new如果您返回一个对象,表达式的结果将是您从构造函数返回的对象。)

于 2013-07-20T12:02:00.390 回答