如何跨浏览器调用动态函数名?我已经看到了一些方法来做到这一点,但没有一个像下面这样“优雅”。问题是它在 Chrome 中工作,但在 Firefox 和 Safari 中都没有。
如果我打电话
const component = "a";
this[component]() // console: Called a
this[`${component}`]() // console: Called a
在 Chrome 上它工作正常,该函数被正确调用。在 Firefox 上它说
TypeError: this[("" + component)] is not a function
如果我想实现这一点,我该怎么做?
编辑以添加更多上下文
框架是 React。
例子:
export default class MyComp extends Component {
a() {
console.log("Called a");
}
b() {
console.log("Called b");
}
c() {
console.log("Called c");
}
renderAThing(component) {
return this[component]();
}
render() {
return this.renderAThing("a");
}
}
如果我在 render() 中直接调用这个组件,它就可以工作。
编辑 2这似乎是一个转译问题,而不是浏览器问题。正如您所指出的,该代码对 Chrome 和 Firefox 有效。我正在与 Meteor 和 Babel 一起使用 React。感谢@Jaromanda X 的提示。
仅供参考,缩小(=生产)的 Meteor 代码也不能在 Chrome 上运行。