简体   繁体   中英

Is there a shortcut for assigning arguments in a constructor to class fields? (Javascript)

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.

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)

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM