Home > Back-end >  Is there a shortcut for assigning arguments in a constructor to class fields? (Javascript)
Is there a shortcut for assigning arguments in a constructor to class fields? (Javascript)

Time:08-27

In a class like the following:

class Rect {
  constructor({ x = 0, y = 0, width = 0, height = 0, bgColor = "#000000" } = {}) {
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.bgColor = bgColor;
  }
}

It seems like there's a lot of repetition when assigning everything to the class object and I was wondering if there was some way to do it all at once.

CodePudding user response:

you can assign it like this.

class Rect {
  constructor({ x = 0, y = 0, width = 0, height = 0, bgColor = "#000000" } = {}) {
   Object.assign(this, {x, y, width, height, bgColor})
  }
}

const r = new Rect()
console.log(r, r.x, r.y, r.width, r.height, r.bgColor)

CodePudding user response:

You can also use for...of loop like so:

class Rect {
   constructor(param = { x: 0, y: 0, width: 0, height: 0, bgColor: "#000000" }) {
      for (const [key, value] of Object.entries(param)) {
         this[key] = value
      }
   }
};

const b = new Rect();
console.log(b.x, b.y, b.width, b.height, b.bgColor)

Thow Vinod Liyanage's answer is more elegant and is shorter.

  • Related