JavaScript中如何通过变量存储的函数名调用目标对象的对应方法
错误写法的逻辑问题
someElem.funcNames[0](someArg) 的实际执行逻辑是:
访问someElem对象下的funcNames属性,取该属性值的0索引项作为函数执行。但你定义的funcNames是独立于someElem存在的数组,并非someElem的属性,因此代码根本读不到你存储的方法名列表,无法触发对应方法。
场景适配的正确实现
JS访问对象属性分为两种常用语法:
- 点语法:
对象.属性名,后续必须跟硬编码的固定属性名,无法传入存储了属性名的变量 - 方括号语法:
对象[属性名表达式],括号内可以放置任意计算结果为字符串的内容(包括变量、数组索引、字符串拼接等),完全匹配你将方法名存储在数组中的使用场景
正确写法无需额外拆分变量,直接将数组索引表达式放在方括号内即可:
const funcNames = [ "func1", "func2", "func3" ]; // 取数组0位存储的方法名字符串,在someElem对象上完成调用 someElem[funcNames[0]](someArg);
健壮性优化写法
如果运行时存在someElem为空、对应方法不存在的风险,可以搭配可选链语法避免无意义的报错:
// 仅当someElem存在、对应方法存在时才执行调用,否则静默跳过 someElem?.[funcNames[0]]?.(someArg);
内容的提问来源于stack exchange,提问作者Unnat
相关产品推荐
相关产品推荐

