首页 > 解决方案 > 如何合并在构造函数中作为属性传递的选项对象

问题描述

我想创建一个将options对象作为其构造函数中的参数的类。选项对象的每个成员都应该成为类实例的成员。

const __defaults = {
   isDisabled = false,
   caption: undefined
}
class Button {
   constructor(options) {
       this.caption = options.caption || __defaults.caption;
       this.isDisabled = options.isDisabled || __defaults.disabled;
   }
}

有没有更好的方法来处理这个像传播运算符?

this.config = { ...options, ...__defaultOptions };

唯一的问题是我不能直接分配给this使用扩展运算符。那将是一个无效的分配。

this = { ...options, ...__defaultOptions }; 

我想直接在类中创建所有属性,而不是在实例的配置属性中。这样,当我以以下方式初始化按钮时...

const registerButton = new Button({ isDisabled: true });

我可以像这样读取属性:

console.log(registerButton.isDisabled);

而不是这样...

console.log(registerButton.config.isDisabled);

前一种方法更加冗长和可读。

标签: javascript

解决方案


使用Object.assign()

class Foo{
  constructor(options)
  {
    Object.assign(this,options);
  }
}

let foo = new Foo({a:1,b:2,c:3});
console.log(foo);


推荐阅读