在javascript对象文字中获取set访问权限

时间:2012-01-15 16:15:18

标签: javascript jquery

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

问题在于:

我有一个地图对象的简单对象文字

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'结构吗?任何指针都会有所帮助,所以我可以继续前进。

由于

2 个答案:

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

公共场所内的所有内容都可以在室外使用,其他所有内容都是私密的,并且可以共享。