添加命名空间到您的JavaScript

时间:2013-07-20 11:54:20

标签: javascript google-maps google-maps-api-3 javascript-namespaces

我几年前曾在谷歌地图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>

在第3版中,所有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时间里写了一个库,并用于多个项目,并且工作得很好。但现在我正在开发一个新项目并使用谷歌V3 API,并希望重用旧的v2库。但添加v3库不会在全局命名空间中添加API类,并且我的库不起作用。有没有什么方法可以像我们在C#中一样在我们的JavaScript文件中添加命名空间,它允许我们编写类而不附加命名空间

1 个答案:

答案 0 :(得分: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...*/);
}

(和其他人类似。)

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