Symbol, sum experiments
JavaScript
function makeSummator () {
let accum = 0;
function sum (number) {
accum += number;
return sum;
}
sum.toString = () => {
console.error('toString');
return accum;
};
sum[Symbol.toPrimitive] = function (hint) {
console.error('hint', hint);
switch (hint) {
case 'string':
return accum;
case 'number':
return accum;
case 'default':
return accum;
default:
return accum;
}
}
return sum;
}
function add(...args) {
function recSum(num) {
return add(...args, num)
}
recSum.valueOf = function() {
return args.reduce((acc, n) => acc + n, 0)
};
return recSum;
}
const sum = makeSummator();
console.error(sum(1)(2)(4)(5));
console.error(+sum(1)(2)(4)(5));
//console.error('add', add(1)(2)(4)(5));
//console.error('add', +add(1)(2)(4)(5));
class Riba {
/* get [Symbol.toStringTag]() {
return Riba.name;
} */
constructor (data) {
this.data = data;
}
/* get data () {
return this.data;
}
set data (data) {
this.data = data;
} */
/* toString (...args) {
console.error('toString', args);
return 'string';
}
valueOf (...args) {
console.error('valueOf', args);
return 1;
} */
}
const riba = new Riba(1);
//console.error('riba', riba);
/* console.error('riba', Object.prototype.toString.call(riba));
console.error('convert to string', riba + 'string');
console.error('conver to number', +riba);
console.error('conver to number', Number(riba));
console.error('conver to number', riba * 1);
console.error('conver to number', parseInt(riba)); */