如何将构造函数传入的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
相关产品推荐
相关产品推荐

