页面上有一个地图,一个button。javascript中有一个函数,形如:
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
}
}
没问题,可以显示地图。
我想做的是,按button,添加一个Marker。写了一个函数,形如:
function displaymessage()
{
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
}
也可以正常使用
但是,总觉得
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
这两行反复操作,效率太低,请问能否把Gmap2类只一次实例化,就能是map在整个页面里都能使用。
谢谢!!!
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
}
}
没问题,可以显示地图。
我想做的是,按button,添加一个Marker。写了一个函数,形如:
function displaymessage()
{
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
}
也可以正常使用
但是,总觉得
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
这两行反复操作,效率太低,请问能否把Gmap2类只一次实例化,就能是map在整个页面里都能使用。
谢谢!!!
像这种 对象共享式的方法 你可以使用享元模式. 我这里给你个伪代码思路.
具体的你自己去完善吧.
<script>
function Gmap2(obj) {
this.obj = obj;
}
var MapFactory = function() {
var mapInstance = null;
return {
createMap: function(obj) {
if(mapInstance != null) {
mapInstance = new GMap2(obj);
}
return mapInstance;
}
}
}(); var MapManager = function(){
return {
mapObj: function(obj) {
var map = MapFactory.createMap(obj);
return this;
},
setCenter: function(obj) {
alert(obj);
},
addOverLay: function(obj) {
}
}
}(); MapManager.mapObj(document.getElementById('map_canvas')).setCenter('test'); </script>
单例工厂 + 享元模式
*/
function Gmap2(obj) {
this.obj = obj;
}
/* 单例工厂 仅实例化一次 */
var MapFactory = function() {
var mapInstance = null;
return {
createMap: function(obj) {
if(mapInstance != null) {
mapInstance = new GMap2(obj);
}
return mapInstance;
}
}
}(); /* 通过享元模式 将内外状态(方法)分离管理 */
var MapManager = function(){
return {
mapObj: function(obj) {
var map = MapFactory.createMap(obj);
return this;
},
// 以前的公有方法 给抽象出来 单独管理. 这样内部的Gmap2都是同样的状态可以
// 公用.从而只实例化一次.而外部状态的方法 单独管理.可以单独去添加
setCenter: function(obj) {
alert(obj);
return this;
},
addOverLay: function(obj) {
alert(obj);
return this;
}
}
}();
// 返回this当前实例 以支持链式操作
MapManager.mapObj(document.getElementById('map_canvas')).setCenter('setCenter').addOverLay('addOverLay');
maps:{}
,get:function(mapid){
var m=maps[mapid];
if(null==m){m=new GMap2(document.getElementById(mapid)); }
return m;
}
}
不要使用函数和this即可。
即var a={b:"bb"};这样