RequireJS来自字符串名称的新模块实例

时间:2013-04-10 15:45:30

标签: javascript requirejs

我有几个模块要从字符串中实例化对象。 当类/对象等在全局范围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();
});

1 个答案:

答案 0 :(得分:2)

  

我有几个模块要从字符串

实例化对象

这主要是一个坏主意并且表明代码味道。你真的需要吗?

  

你知道我需要的范围吗?

TestClassB本地变量,无法按名称访问。由于您已经将testclassb静态声明为依赖项,因此没有理由不使用静态变量TestClassB

但是,require.js允许你同步require()已经加载的模块,所以你也可以使用

new (require("testclassb"))();