console.log(Calculator.getResult()); // 0
Calculator.add(4)(1);
console.log(Calculator.getResult()); // 5
Calculator.subtract(1)(1)(1)(2);
console.log(Calculator.getResult()); // 0function Calc(){
var res = 0;
return {
add: function add(x){
if (!isNaN(x)) res += x;
return add;
},
subtract: function sub(x){
if (!isNaN(x)) res -= x;
return sub;
},
divide: function div(x){
if ((!isNaN(x)) && (x !== 0)) res /= x;
return div;
},
multiply: function mult(x){
if (!isNaN(x)) res *= x;
return mult;
},
getResult: function (){
return res;
},
reset: function (){
res = 0;
return res;
}
}
}
var Calculator = new Calc();
module.exports = Calculator;const result = Calculator.add(100)
.multiply(2)
.divide(20)
.reset()
.subtract(1)
.getResult();
console.log(result); // -1
function Calc() {
let val = 0;
const calc = {
add: x => (isNaN(x) || (val += x), calc.add),
sub: x => (isNaN(x) || (val -= x), calc.sub),
mul: x => (isNaN(x) || (val *= x), calc.mul),
div: x => (isNaN(x) || !x || (val /= x), calc.div),
reset: () => (val = 0, calc),
result: () => val,
};
const t = Object.entries(calc);
t.forEach(n => t.forEach(([ k, v ]) => n[1][k] = v));
return calc;
}
const calc = Calc();
calc.add(1)(2)(3).sub(4).mul(5)(6).result(); // 60 function Calc() {
let v = 0;
const proto = {
add(x) { v += x; },
subtract(x) { v -= x; },
divide(x) { x && (v /= x); },
multiply(x) { v *= x; }
};
const keys = Object.keys(proto);
const ctx = keys.reduce((acc, key) => {
const wrap = x => ((!isNaN(x) && proto[key](Number(x))), wrap);
return ((acc[key] = wrap), acc);
}, {
getResult: () => v,
reset: () => ((v = 0), ctx)
});
keys.forEach(key => Object.assign(ctx[key], ctx));
return ctx;
}