You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将构造函数传入的options对象属性直接合并为类实例属性

实现方案

你可以通过内置的Object.assign方法实现需求,该方法可以直接将源对象的所有可枚举属性复制到目标对象上,此处目标对象就是类实例this,不需要额外声明config中间层。

核心实现代码

// 修正原默认值对象的语法错误,对象键值用冒号赋值
const __defaults = {
  isDisabled: false,
  caption: undefined
}

class Button {
  // 给options设置空对象默认值,避免不传参数时解构报错
  constructor(options = {}) {
    // 合并默认配置和用户传入配置,用户传入的配置优先级更高
    const mergedOptions = { ...__defaults, ...options };
    // 直接将所有合并后的属性挂载到实例自身
    Object.assign(this, mergedOptions);
  }
}

效果验证

const registerButton = new Button({ isDisabled: true });
// 直接读取实例属性,符合需求
console.log(registerButton.isDisabled); // 输出:true
console.log(registerButton.caption); // 输出:undefined

可选优化(限制挂载的属性范围)

如果不希望用户传入的额外属性被挂载到实例上,只保留默认配置里声明过的属性,可以改用遍历默认值键名的方式实现,同时推荐用空值合并运算符?? 替代逻辑或||,避免0、false这类合法假值被默认值覆盖:

class Button {
  constructor(options = {}) {
    Object.keys(__defaults).forEach(key => {
      this[key] = options[key] ?? __defaults[key];
    });
  }
}

内容的提问来源于stack exchange,提问作者Pratik Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:15:03