Best way to extend Google Maps API v3 Classes
可以扩展google maps api v3中的一些类,特别是google.maps.mvcobject和google.maps.overlayview。
在一些示例中,它们将在回调函数
(a)的解决方案是在我自己的脚本之前包含google maps api,而不包含回调函数吗?或者(b)我只是定义回调函数中的所有内容吗?或(c)其他方法。
选项A1 2 | <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY"> <script src="./assets/js/main.js" type="module"> |
选项B
1 2 | <script src="./assets/js/main.js" type="module"> <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initMap"> |
其中
1 2 3 4 5 6 7 8 9 10 11 | function initMap() { class Alpha extends google.maps.MVCObject {} class Bravo extends google.maps.MVCObject {} class Charlie extends google.maps.MVCObject {} // More classes. class Zulu extends google.maps.MVCObject {} // Rest of code. } |
选项C
其他方法。
《文献describes下面的方式:他们在地图上
The MVCObject constructor is guaranteed to be an empty function, and so you may inherit from MVCObject by simply writing MySubclass.prototype = new google.maps.MVCObject();
鸭
Inherit from this class by setting your overlay's prototype: MyOverlay.prototype = new google.maps.OverlayView();. The OverlayView constructor is guaranteed to be an empty function.
所以这一可能的选项C)将是你的类的定义,然后分别在"只读configure传承的initmap:
1 2 3 4 5 6 | function initMap() { Alpha.prototype = new google.maps.MVCObject(); Bravo.prototype = new google.maps.MVCObject(); ... } |
或者,更好的保持平衡,一切都在一起,你可以拥有一些自助图书馆的功能在你的文件,所以你会在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // in my_library.js: // For now we don't mention that our class extends MVCObject function Alpha() { console.log('Constructed Alpha'); this.my_method = function() { // the `parent_method` can be defined in the // prototype we assign later this.parent_method(); } } function Bravo() { console.log('Constructed Alpha'); } // The function to dynamically subclass our classes. function init() { Alpha.prototype = new google.maps.MVCObject(); Bravo.prototype = new google.maps.MVCObject(); } // The callback for google maps script. function initMap() { // invoke the `init` from my_library. my_library.init();; } |
以上实例的辨别方法(我们定义
1 2 3 4 5 6 7 8 9 10 11 12 13 | function Alpha() { console.log('Constructed Alpha'); } var alpha = new Alpha(); alpha.my_method = function() { this.parent_method(); } // The function to dynamically subclass our classes. function init() { alpha.prototype = new google.maps.MVCObject(); } |
创造更多的
一个替代的冰的两个定义自己的对象使用的原型,然后使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function Alpha() { console.log('Constructed Alpha'); } Alpha.prototype.my_method = function() { this.parent_method(); } // The function to dynamically subclass our classes. function init() { // We can not overwrite Alpha.prototype as we will loose // the methods we defined, so we assign the prototype of // the prototype Alpha.prototype.prototype = new google.maps.MVCObject(); } |
你可以使用A和以后的版本,你可以在你的代码append《initmap main.js回调你的文件。在这种方式我可以使用Ajax要求申请yout回调功能。
否则你会有两个选项B"的使用和定义开始,《initmap main.js功能在你的文件。
你应该也负载的Google Maps API在异步模式:
1 | <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY" async defer> |
文献和实例:http:/ / / / developers.google.com地图JavaScript文件/ / /图的简单例子