我有几个模块要从字符串实例化对象。
当类/对象等在全局作用域window
上时,这通常很容易
new window["MyClass"]()
使用require JS时,模块不在
window
范围内,并且如果在类中,则不在this
上。你知道我需要什么范围吗?
define(['testclassb'], function(TestClassB) {
var TestClassA, testclassa;
TestClassA = (function() {
function TestClassA() {
console.log("A");
new this["TestClassB"](); #errors with undefined function
new window["TestClassB"](); #errors with undefined function
new TestClassB(); #works fine
}
TestClassA.prototype.wave = function() {
return console.log("Wave");
};
return TestClassA;
})();
testclassa = new TestClassA();
return testclassa.wave();
});
最佳答案
我有几个模块要从字符串实例化对象
这主要是一个坏主意,并表明有代码异味。您真的需要吗?
你知道我需要什么范围吗?TestClassB
是一个局部变量,无法通过名称访问。由于您已经静态地将testclassb
声明为依赖项,因此也没有理由不使用静态变量TestClassB
。
但是,require.js允许您同步require()
已经加载的模块,因此您也可以使用
new (require("testclassb"))();