【问题标题】:add namespace to your javascript将命名空间添加到您的 javascript
【发布时间】:2013-07-19 16:16:43
【问题描述】:

几年前我曾研究过 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 地图 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 文件中,它允许我们在不附加命名空间的情况下编写类

【问题讨论】:

  • 地图 API 的第三个版本使用不同的方法和新的方法名称,所以即使你可以像这样命名你的 javascript(你不能)你必须改变所有的名字,参数等来匹配新的 API,所以你最好只重写你的库。

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


【解决方案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 表达式的结果将是您从构造函数返回的对象。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-09-21
    相关资源
    最近更新 更多