2012-01-15 77 views
0

第一次使用對象文字,看起來我不太明白它們是正確的。我需要的是具有對象範圍的私有變量,因此對象文本中的所有函數都可以訪問它們。在JavaScript對象文字中獲得設置訪問權限

這裏的問題:

我有一個簡單的對象字面映射對象

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'類'結構嗎?任何指針都可以幫助我繼續前進。

感謝

回答

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

+0

美麗!非常感謝。仍然習慣於JavaScript對象/函數/文字/範圍的複雜性。但是,這完全按照我的意願工作。 – Gerry 2012-01-15 16:53:57

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

報告一切可用之外,其他一切都是私人和共享。