2011-07-19 15 views
-1

私が作成したjavascriptクラスからインスタンス/オブジェクトを作成する際に問題があります。コードを確認して、コードの最後にある出力を確認してください。javascriptシングルトンパターン - 異なるインスタンスを作成する際の問題

ありがとうございます... よろしくお願いします。

//MARKER MANAGER CLASS 
      var MarkerManager = (function(){ 

       var arr = []; 
       var arrName = []; 
       var counter = 0; 

       var MarkerManager = function (args){ 

        arr = []; 
        arrName = []; 
        counter = 0;    

        return { 
         addMarker: addMarker, 
         getMarker: getMarker, 
         getIndex: getIndex 
        } 

       }; 

       function getIndex(){ 
        return counter; 
       } 

       function addMarker(marker){ 
        arrName[counter] = marker.name; 
        arr[counter] = marker; 
        counter++; 
       } 

       function getMarkerNameList(){ 
        return arrName; 
       } 

       function getMarker(li_name){ 
        var markerIndex = arrName.indexOf(li_name);   
        return arr[markerIndex]; 
       } 



       /*var instance; 

       var _static = { 

        name: 'manager', 

        getInstance: function (args){ 

         if(instance === undefined){ 
          instance = new MarkerManager(args) 
         } 

         return instance; 

        }    

       }; 

       return _static; 
       */ 

       return function (args){ 

        var manager = new MarkerManager(args); 
        return manager; 

       } 

      })(); 


      var marker1 = new Marker({name:'test0', lat:3 , lng:5, isDraggable:true, iconType:'red' }); 
      var marker2 = new Marker({name:'test1', lat:33 , lng:55, isDraggable:true, iconType:'red' }); 
      var marker3 = new Marker({name:'test2', lat:44 , lng:99, isDraggable:true, iconType:'red' }); 
      var marker4 = new Marker({name:'test3', lat:55 , lng:77, isDraggable:true, iconType:'red' }); 
      var marker5 = new Marker({name:'test4', lat:88 , lng:65, isDraggable:true, iconType:'red' }); 

      var manager = new MarkerManager({test:'test2'}); //MarkerManager.getInstance({map:'testtt'});// 
      var manager2 = new MarkerManager({test:'test1'}); 

      manager.addMarker(marker1); 
      manager.addMarker(marker2); 
      manager.addMarker(marker3); 

      manager2.addMarker(marker4); 
      manager2.addMarker(marker5); 

      alert(manager.getMarkerNameList());  
      alert(manager2.getMarkerNameList()); 

     //output is "test0,test1,test2,test3,test4" for both manager objects. How can I separate them 
+0

MarkerManagerには2つの定義があり、Markerの定義はありません。また、あなたが助けを求めている問題が何であるかを述べてください。 – jfriend00

+0

あなたの投稿のタイトルは何を意味していますか?シングルトンパターンを使用しようとしている場合、なぜ別のインスタンスを作成しようとしていますか? – nnnnnn

+0

@nnnnn私が書いたのは異なるインスタンスを作成していないからです。 – user403295

答えて

2

あなたはすべての変数&コンストラクタ関数への管理者が必要な機能を移動する必要があります。または、MarkerManagersは同じ変数&を一緒に共有します。

 var MarkerManager = (function(){ 
      return function (args){ 

       var arr = []; 
       var arrName = []; 
       var counter = 0; 

       var MarkerManager = function (args){ 

        arr = []; 
        arrName = []; 
        counter = 0;    

        return { 
         addMarker: addMarker, 
         getMarker: getMarker, 
         getIndex: getIndex 
        } 

       }; 

       function getIndex(){ 
        return counter; 
       } 

       function addMarker(marker){ 
        arrName[counter] = marker.name; 
        arr[counter] = marker; 
        counter++; 
       } 

       function getMarkerNameList(){ 
        return arrName; 
       } 

       function getMarker(li_name){ 
        var markerIndex = arrName.indexOf(li_name);   
        return arr[markerIndex]; 
       } 


       var manager = new MarkerManager(args); 
       return manager; 

      } 

     })(); 
+0

あなたは私の一日を過ごしました。ありがとうございます! – user403295

関連する問題