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();
}