Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

123
Views
How to transform functional invocation to chainable methods?

I have the following toy class to encapsulate some bitwise functions:

class BitOp {
    static set(num) {
        return num;
    }
    static shiftR(num, n=1) {
        return num >> n;
    }
    static shiftL(num, n=1) {
        return num << n;
    }
    static toBin(num) {
        console.log(num, '>', num.toString(2));
        return num;
    }
}

const
    set     = BitOp.set,
    shiftR  = BitOp.shiftR,
    shiftL  = BitOp.shiftL,
    toBin   = BitOp.toBin;
    
toBin(shiftL(set(44), 2));

I would like to see if I can use the above function and perhaps add a wrapper around a variable that calls it so that it can be used alternately to chain to gether method calls, such as like:

new BitOp().set(44).shiftL(2).toBin(); // or new BitOp(44).shiftL...

I know I can write a separate class for it, such as the following but I'd like to use a more compact and interesting approach!

class BitOp {
    set(num) {
        this.num = num;
        return this;
    }
    shiftR(n=1) {
        this.num >>= n;
        return this;
    }
    shiftL(n=1) {
        this.num <<= n;
        return this;
    }
    toBin() {
        console.log(this.num, '>', this.num.toString(2));
        return this;
    }
}

new BitOp().set(44).shiftL(2).toBin();

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

It sounds like you're asking how to instantiate a new class by invoking a function:

class BitOp {
  constructor (num) {
    this.num = num;
  }

  set (num) {
      this.num = num;
      return this;
  }

  shiftR (n=1) {
      this.num >>= n;
      return this;
  }

  shiftL (n=1) {
      this.num <<= n;
      return this;
  }

  toBin () {
      console.log(this.num, '>', this.num.toString(2));
      return this;
  }
}

function bitOp (num) {
  return new BitOp(num);
}

bitOp(5).toBin(); // logs 5 > 101

about 4 years ago · Juan Pablo Isaza Report

0

Drawing inspiration from the accepted answer at Possible to do a chained factorial method without a helper method, here is an approach that would allow both:

const shiftR = (num, places) => num >> (places || 1);
const shiftL = (num, places) => num << (places || 1);
const BitOp = (num) => new InlineBitOp(num);

class InlineBitOp {
    constructor(num)    { this.num = num }
    shiftL(places)      { return BitOp(shiftL(this.num, places)) }
    shiftR(places)      { return BitOp(shiftR(this.num, places)) }
    toString()          { return this.num };
}

let x = 44;
console.log(shiftL(shiftL(x, 2), 3));
console.log('' + new InlineBitOp(x).shiftL(2).shiftL(3));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!