如何不使用条件判断语句动态创建不同Class的实例
无判断动态创建类实例的解决方案
完全不需要写多分支条件判断,最常用的实现是映射表模式,实现和维护成本都很低:
基础实现方案
你只需要预先定义一个输入字符串和类的映射对象,直接通过用户输入索引到对应类后实例化即可:
// 1. 定义你的基础类和子类 class Humans { // 类逻辑 } class Men extends Humans{ // 类逻辑 } class Women extends Humans{ // 类逻辑 } // 2. 定义输入-类映射表,新增类只需要在这里追加对应关系即可 const classMapper = { 'men': Men, 'women': Women, // 第3、4...10个类直接按格式追加,不需要改实例化逻辑 // 'teenager': Teenager, // 'elder': Elder } // 3. 一行代码完成实例化,不需要任何条件判断 const obj = new classMapper[userInput]()
异常兜底处理
如果存在用户输入不匹配映射表key的场景,可以加一层兜底逻辑避免报错:
// 输入不匹配时默认返回Humans基类实例,也可以自定义抛出异常 const TargetClass = classMapper[userInput] ?? Humans const obj = new TargetClass()
大规模类场景的优化方案
如果子类数量极多(超过10个),还可以用装饰器自动注册映射,不需要手动维护映射表:
const classMapper = {} // 定义自动注册装饰器 function registerClass(type) { return function(targetClass) { classMapper[type] = targetClass } } // 定义子类时加装饰器自动完成注册 @registerClass('men') class Men extends Humans{} @registerClass('women') class Women extends Humans{} // 实例化逻辑不变 const obj = new classMapper[userInput]()
小提示:你原有示例中的判断逻辑
if (userInput = 'men')是赋值操作,实际要做相等判断应该改为userInput === 'men',避免出现逻辑错误。
内容的提问来源于stack exchange,提问作者matheu-s
相关产品推荐
相关产品推荐

