Javascript was unable to set personal variables

I created a class like structure with a private variable. The code looks like this:

var sinan = function(){
    var a = {ssss: 1};
    return {
        get: function(){
            return a;
        },
        set: function(s){
            a = {ssss: s}
        }
    }
}

      

When i do

sinan().get(); // outputs {ssss: 1}
sinan().set(2); 
sinan().get(); // outputs {ssss: 1}

      

He did not output {ssss: 2}

. Does anyone know what's going on? Thank.

+3


source to share


2 answers


Since your "class" is not a singleton sinan()

every time creates a new instance with a.sss

equal 1

.

What you want to do is create just one instance and use it:

var s = sinan();
console.log( s.get() );
s.set(2); 
console.log( s.get() );

      

You can of course make a sinon

singleton too if you like. For example, here's a simple implementation with an instance stored in a closure:



var sinan = function () {

    var instance;

    return function () {
        if (!instance) {
            instance = function() {
                var a = {ssss: 1};
                return {
                    get: function () {
                        return a;
                    },
                    set: function (s) {
                        a.ssss = s
                    }
                }
            }();
        }
        return instance;
    };
}();

      

So in this case sinan() === sinan()

, i.e. sinan()

returns the same object each time.

Demo: http://jsfiddle.net/r07wgyjt/

+6


source


Your problem is that every time you call sinan()

a new instance of sinan is created, so it's the same as:

var s1 = sinan();
s1.get(); // 1
var s2 = sinan() ;
s2.set(2); // 2
var s3 = sinan();
s3.get(); // 3

      



You must do:

var s1 = sinan();
s1.get(); // 1
s1.set(2); // 2
s1.get(); // 2

      

+1


source







All Articles