2017-04-12 53 views
0

我有一個是進口這樣的功能:Javascript - 如何使用窗口[funcName]運行導入的函數?

import { myFunc } from './myFunc.js'; 

我想用一個字符串作爲函數名(字符串的內容可能會發生變化)來運行該功能:

let fnStr = "myFunc"; 
let fn = window[fnStr]; 
fn(); 

但是,window[fnStr]找不到導入的功能。

+0

你出口myFunc的從myFunc.js文件? –

+0

是的,我已經出口它。 – JoeTidee

+0

這是不可能的。 ES6模塊使用「聲明式環境記錄」。請參閱:http://stackoverflow.com/a/32963971/3581485 – LukeP

回答

1

您不這樣做,因爲它們不是全局對象的屬性(它通過瀏覽器上的window引用)。他們根本不是全能的。 。這是一個很好的事情™:-)

您可以創建與它的職能自己的對象,並用它來代替:

import { myFunc } from './myFunc.js'; 

const funcs = { 
    myFunc 
}; 

用法:

let fnStr = "myFunc"; 
let fn = funcs[fnStr]; 
fn(); 

如果您有幾個這些功能,您可能希望將它們導出爲對象而不是單個綁定,例如:

myFuncs.js

function myFunc() { 
    // ... 
} 
function myOtherFunc() { 
    // ... 
} 

export default {myFunc, myOtherFunc}; 

然後

import funcs from './myFuncs.js'; 

let fnStr = "myFunc"; 
let fn = funcs[fnStr]; 
fn(); 
相關問題