我正在将代码库移动到ES6类。
我还在处理一些遗留的jQuery模块,这些模块附加了init
个函数,这些函数是从html调用的。代码的入口点如下所示:
import * as moduleOne from './module_one/module_one';
import * as moduleTwo from './module_two/module_two';
import * as moduleThree from './module_three/module_three';
import * as moduleFour from "./module_four/module_four";
window.initjQuery = (mod) => {
eval(mod).init()
}
在HTML中:
<script>initjQuery('moduleFour')</script>
这样可以正常调用moduleFour.init()。但我想尽可能避免使用eval。问题是,Babel将this
重新映射为undefined
,因此我无法执行以下操作:
var _this = this;
window.initjQuery = function(mod) {
_this[mod].init();
}
有任何想法如何解决这个问题?
答案 0 :(得分:4)
这些模块名称只是变量(在模块范围内),没有任何对象的属性。请注意,this
在模块中是undefined
,就像在严格函数中一样。
因此,您需要将这些模块对象放在显式对象上:
import * as moduleOne from './module_one/module_one';
import * as moduleTwo from './module_two/module_two';
import * as moduleThree from './module_three/module_three';
import * as moduleFour from "./module_four/module_four";
const modules = {moduleOne, moduleTwo, moduleThree, moduleFour};
window.initjQuery = (mod) => {
modules[mod].init()
};