我正在做一个奇怪的事情,我得到一个函数的名称,并使用该名称调用该函数,如下所示:
function myFunc(){
//do somethng
};
var myFuncName = 'myFunc';
window[myFuncName](); // Expected result.
...有效,但是现在我使用ES6 const
命名定义了func,window[myFuncName]
未定义:
const myFunc = () => {
//do somethng
};
var myFuncName = 'myFunc';
window[myFuncName](); // window[myFuncName] is not a function.
只有名字作为字符串时,有人知道如何调用ES6函数吗?我正在使用浏览器Web扩展,但是认为这是一个一般的JavaScript问题。谢谢!
答案 0 :(得分:1)
只有eval
才有可能使用,不应使用它:
eval(myFuncName + '()');
相反,请更改代码,以便将函数放置在 object 上(即使它不是窗口),然后使用普通括号表示法查找属性值(就像您在与window
(除了fns
之外)进行操作,然后调用检索到的函数:
const fns = {
myFunc() {
console.log('do something');
}
};
const myFuncName = 'myFunc';
fns[myFuncName]();
如果您想更加模仿对象上的属性const
,请使用Object.defineProperty
通过configurable: false
确保函数属性不能被删除或重新分配:< / p>
'use strict';
const fns = {};
Object.defineProperty(fns, 'myFunc', {
configurable: false,
value: () => {
console.log('do something');
}
});
const myFuncName = 'myFunc';
fns[myFuncName]();
// can't reassign property:
fns.myFunc = 'foo';