function timePlus(time1, time2) { let mins = (time1.mins + time2.mins) % 60; let hours = time1.hours + time2.hours + Math.floor((time1.mins+time2.mins)/60); return {'hours': hours, 'mins': mins}; } console.log(timePlus({hours: 10, mins:30}, {hours: 17, mins:47})); function maketime(hours, mins){ let plus=function (other) { let raw=timePlus(this,other); return maketime(raw.hours, raw.mins); }; return { 'hours': hours, 'mins': mins, 'plus': plus}; } let A=maketime(10, 30); let B=maketime(17, 47); let C=A.plus(B); console.log(C); let protoTime = { plus: function(other) { let raw=timePlus(this,other); return timeNew(raw.hours, raw.mins); } }; function timeNew(hours, mins) { let obj=Object.create(protoTime); obj.hours = hours; obj.mins = mins; return obj; } D=timeNew(21,42); E=timeNew(17,37); F=D.plus(E); console.log(F); function Time(hours, mins){ this.hours=hours; this.mins=mins; } Time.prototype.plus=function (other) { let raw=timePlus(this,other); return new Time(raw.hours, raw.mins); } G = new Time(20,59); H = new Time(11,11); I=G.plus(H); console.log(I); class Time2 { constructor(hours, mins){ this.hours=hours; this.mins=mins; }; plus(other) { let raw=timePlus(this,other); return new Time2(raw.hours, raw.mins); } } J= new Time2(5,30); K= new Time2(11,55); L=J.plus(K); console.log(L)