2012-01-15 4 views
0

初めてオブジェクトリテラルを使用すると、正しく理解できないようです。私が必要とするのは、オブジェクトのスコープを持つプライベート変数なので、オブジェクトリテラルのすべての関数からアクセスできます。私はこれは、すべての罰金ですjavascriptオブジェクトリテラルでset accessを取得

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'のような変数値の一部を保存し、他のメソッドでアクセスできるようにすることです。例えば、 mapObjはinitメソッドの後に内部的にマップを保持する必要があるため、setMarkerに 'map'を渡す必要はありません。

同様に、私はmapObj.getMap()を使ってinitで作成されたマップオブジェクトにアクセスしたいと思っています。

どのように動作するのかわかりません。 varmapを宣言すると、エラーがスローされます。たとえば、

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は外部で入手できます。国民の内側

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

すべてのレポート

+0

美しい!どうもありがとう。まだjavascriptのobject/function/literal/scope intricaciesに慣れています。しかし、これはまさに私が望んでいた通りです。 – Gerry

0

クロージャは、他のすべては、プライベート、および共有され、外部に提供されています。

関連する問題