Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

125
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda