开发者

javascript singleton pattern - problem in creating different instances

I have a problem in creating instances/objects from a javascript class that I have written. Can you please check the code and see the output which is at the bottom of the code.

Thanks in advance... Regards.

//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 manage开发者_运维知识库r = 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 


You need to move all the variables & functions needed by the manager to the constructor function. Or the MarkerManagers will share the same variables & functions together.

        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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜