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.
source to share
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.
source to share
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
source to share