我几年前曾在谷歌地图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文件中添加命名空间,它允许我们编写类而不附加命名空间
答案 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...*/);
}
(和其他人类似。)
(即使您将new
与GMap2
一起使用也是有效的,因为如果您返回一个对象,new
表达式的结果将是您从构造函数返回的对象。)< / p>