Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda