考虑以下:
function windowTest() { }
(function () {
function test() { }
var test1 = new test(); // Works fine.
var test2 = new window["windowTest"](); // Works since windowsTest is declared globally.
var test3 = new window["test"](); // Fails since in an IIFE.
// How can I create a testObj if I only have the string "test"?
})();
基本上,我想创建一个其功能在IIFE中声明的对象。
最佳答案
原因
var test3 = new window["test"]();
失败是因为未全局声明
test
。如您所知,如果您想访问直接在IIFE中声明的项目,则可以按名称访问它们。new test();
另一种方法是将函数存储在某种对象内,然后像使用
window
一样访问该对象。这几乎总是解决此类问题的方法。(function() {
var context = {
test: function() {
console.log('new test');
}
};
var test = new context['test']();
})();
最后一种方法使用
eval
。 eval
几乎总是a really bad idea.确实,除非您只是出于兴趣而滥用该语言,否则应避免使用它。但是您可以在这种情况下使用它。(function() {
function test() {
console.log('new test');
}
var test = eval('new test()');
})();
关于javascript - 从IIFE动态调用构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41902540/