获取javascript对象文本中的设置访问权限

获取javascript对象文本中的设置访问权限,javascript,jquery,Javascript,Jquery,第一次使用对象文字,我似乎不太理解它们。我需要的是具有对象范围的私有变量,因此可以访问对象文本中的所有函数 问题是: 我有一个映射对象的简单对象文本 var mapObj = { init: function (lat, lng, documentID) { var myOptions = { center: new google.maps.LatLng(lat, lng), zoom: 18, m

第一次使用对象文字,我似乎不太理解它们。我需要的是具有对象范围的私有变量,因此可以访问对象文本中的所有函数

问题是:

我有一个映射对象的简单对象文本

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方法之后在内部保存map

类似地,我希望能够通过mapObj.getMap()访问在init中创建的映射对象

我不知道它是怎么工作的。将var映射声明为

var mapObj {
   var map
}
例如,抛出错误

我是不是太期待这个像C#一样工作了?我应该使用经典的javascript“类”结构吗?任何指示都会有帮助,这样我可以继续前进


谢谢

只需将其包装在如下函数中:

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在外部可用。

在中报告闭包

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);

公共场所内的一切在外面都是可用的,其他一切都是私有的,都是共享的。

太美了!非常感谢。仍然习惯于javascript对象/函数/文字/范围的复杂性。但这正是我想要的。