0

I have an object with two methods, this is a kind of base object and each methods can be overridden afterward.

 const base = {
        getStepsTitles: () => {
            return [
                "title 1",
                "title 2",
                "title 3"
            ];
        },
        setStepsTitles: (setters) => {
            const titles = this.getStepsTitles(); // this method here is overriden

            for (let [index, setter] of setters.entries())
                setter(titles[index]);
        }
    };

For instance, if I create a function like this

function NewMessages()
{
   this.getStepsTitles = () => {
            return [
                "new title 1",
                "new title 2",
                "new title 3"
            ];
        }
}

When I use the spread operator like this, the getStepsTitles called from the "base" object throws an error as if it was not existing. But my object clearly has it { getStepsTitles: ƒ, setStepsTitles: ƒ }

const newMsg = new NewMessages();

var test = { 
...base,
...newMsg
}

test.setStepsTitles([ 
   (t)=>{console.log(t)},
   (t)=>{console.log(t)},
   (t)=>{console.log(t)}
]);

Am I misunderstanding something?

const base = {
  getStepsTitles: () => {
    return [
      "title 1",
      "title 2",
      "title 3"
    ];
  },
  setStepsTitles: (setters) => {
    const titles = this.getStepsTitles(); // this method here is overriden

    for (let [index, setter] of setters.entries())
      setter(titles[index]);
  }
};

function NewMessages() {
  this.getStepsTitles = () => {
    return [
      "new title 1",
      "new title 2",
      "new title 3"
    ];
  }
}

const newMsg = new NewMessages();

var test = {
  ...base,
  ...newMsg
}

test.setStepsTitles([
  (t) => {
    console.log(t)
  },
  (t) => {
    console.log(t)
  },
  (t) => {
    console.log(t)
  }
]);
JCorriveau
  • 358
  • 1
  • 4
  • 15
  • The syntax for `NewMessages` is incorrect; it should be either `getStepsTitles: () => {` or `this.getStepsTitles = () => {`. – Heretic Monkey Apr 27 '20 at 20:49
  • I did not paste the exact code from my source, but it does not fix the problem – JCorriveau Apr 27 '20 at 20:51
  • 1
    I don't think `this` is what you think it is in `setStepsTitles`; you may want to `console.dir(this)` before using it... – Heretic Monkey Apr 27 '20 at 20:53
  • It seems to work in the code snippet if I replace the arrow functions, but I can't manage to make it work in my source, I probably have something else, thx – JCorriveau Apr 27 '20 at 21:14

0 Answers0