第一次使用对象文字,似乎我不太了解它们。我需要的是具有对象范围的私有变量,因此对象文字中的所有函数都可以访问它。
问题在于:
我有一个地图对象的简单对象文字
var mapObj = {
init: function (lat, lng, documentID) {
var myOptions = {
center: new google.maps.LatLng(lat, lng),
zoom: 18,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById(documentID),
myOptions);
return map;
},
setMarker: function (lat, lng, map, contentObj) {
var myLatlng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: "Hello World!",
content: contentObj
});
}
};
这很好,我可以将它用作mapObj.init(....)和mapObj.setMarker(...),它们可以很好地工作。
我想要做的是存储一些这些变量值 - 比如init()方法中的'map',然后让其他方法可以访问它们。对于例如我不需要在setMarker中传递'map',因为mapObj应该在init方法之后内部保存地图。
同样,我希望能够使用mapObj.getMap()来访问在init中创建的地图对象。
我无法弄清楚它是如何工作的。将var map声明为
var mapObj {
var map
}
例如抛出错误。
我是否希望这种方式像C#一样工作?我应该使用经典的javascript'class'结构吗?任何指针都会有所帮助,所以我可以继续前进。
由于
答案 0 :(得分:2)
将它包装在一个类似的函数中:
var mapObj;
!function() {
var map;
mapObj = {
init: function (lat, lng, documentID) {
var myOptions = {
center: new google.maps.LatLng(lat, lng),
zoom: 18,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById(documentID),
myOptions);
return map;
},
setMarker: function (lat, lng, map, contentObj) {
var myLatlng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: "Hello World!",
content: contentObj
});
}
};
}();
现在map
仅在该函数内部(以及它包含的所有函数)中可用。 mapObj
可在外面找到。
答案 1 :(得分:0)
在
中报告的闭包var mapObj = (function() {
var map; //This is private
var publics = {
init: function(lat, lng, documentID) {
var myOptions = {
center: new google.maps.LatLng(lat, lng),
zoom: 18,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById(documentID), myOptions);
return map;
},
setMarker: function(lat, lng, map, contentObj) {
var myLatlng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: "Hello World!",
content: contentObj
});
}
};
return publics;
})(window);
公共场所内的所有内容都可以在室外使用,其他所有内容都是私密的,并且可以共享。