JavaScript中通过window对象调用函数时如何传递多个参数
问题根因
直接向动态取到的类方法传入数组时,JS默认会把整个数组作为单个入参传入,不会自动将数组元素拆分为多个独立参数,这是多参数传递失效的核心原因。
另外你代码中prevParm1=("a","b")、prevParm3=("a","b","c")的写法存在语法错误:括号包裹、逗号分隔的写法是JS逗号表达式,最终只会返回最后一个元素的值,并不会生成参数数组。
可行实现方案
方案1:使用apply方法拆分参数
apply是JS函数原生方法,支持将数组元素拆分为独立参数传入目标函数,同时可以手动绑定函数执行时的this指向,避免类方法内部this丢失的问题:
const prevPage = "showPage1"; const prevParm = ['a','b']; // 注意参数数组必须用方括号定义 // 动态调用navHelper下的对应方法,拆分参数数组传入 window["navHelper"][prevPage].apply(window["navHelper"], prevParm);
方案2:使用ES6扩展运算符
如果你的项目兼容ES6语法,可以直接用扩展运算符...,写法更简洁,扩展运算符会自动将数组拆解为逗号分隔的独立参数传入:
const prevPage = "showPage1"; const prevParm = ['a','b','c']; window["navHelper"][prevPage](...prevParm);
无效写法避坑
- 不要直接把未拆解的数组作为参数传入:这种写法只会把整个数组作为第一个参数传给方法,对应方法如果定义了多个形参,后续形参会拿到
undefined - 不要用
window["navHelper"][prevPage]["a","b"]这类写法:这是对象属性读取语法,不是函数调用传参逻辑,完全无法触发方法执行 - 不要用圆括号包裹参数集合:这种写法不会生成数组,只会返回逗号表达式最后一个值,完全不符合多参数存储的预期
内容的提问来源于stack exchange,提问作者Zac Marshall
相关产品推荐
相关产品推荐

