JSFiddle - React, Tailwind, and code Playground
by Leo Cavalcante
JavaScript
'use strict';
console.clear();
let getSetFoo = () => {
let foo = 0;
getSetFoo.getFoo = () => foo;
getSetFoo.setFoo = (val) => foo = val;
return {
getFoo() {
return foo;
},
setFoo(val) {
foo = val;
}
}
};
test('Before fix', getSetFoo(), getSetFoo());
getSetFoo = (function () {
const factory = () => {
let foo = 0;
return {
getFoo() {
return foo;
},
setFoo(val) {
foo = val;
}
}
};
// statics
let foo = 0;
factory.getFoo = () => foo;
factory.setFoo = (val) => foo = val;
return factory;
}());
test('After fix', getSetFoo(), getSetFoo());
// tests
function test(suit, bar, baz) {
console.group(suit);
console.log('Start');
console.assert(bar.getFoo() === 0); // pass
bar.setFoo(1);
console.assert(bar.getFoo() === 1); // pass
console.assert(baz.getFoo() === 0); // pass
baz.setFoo(2);
console.assert(baz.getFoo() === 2); // pass
console.assert(bar.getFoo() === 1); // pass
// "static"
console.assert(getSetFoo.getFoo() === 0, 'getSetFoo default value isnt 0'); // fail
getSetFoo.setFoo(3);
console.assert(getSetFoo.getFoo() === 3); // pass
console.assert(bar.getFoo() === 1); // pass
console.assert(baz.getFoo() === 2, 'baz foo value isnt 2 anymore'); // fail
console.log('End');
console.groupEnd();
}