2013-04-10 3 views
0

У меня есть несколько модулей, которые я хочу создать экземпляр объекта из строки. Это, как правило, легко, когда классы/объекты и т.д. находятся на глобальном масштабе windowRequireJS новый экземпляр модуля из имени строки

new window["MyClass"]() 

С требуют 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(); 
}); 

ответ

2

У меня есть несколько модулей, которые я хочу, чтобы создать экземпляр объекта из строки

Это в основном плохая идея, и указывает на кодовую запах. Вам это действительно нужно?

Знаете ли вы, какую область я требую?

TestClassB является локальными переменной, что невозможно получить доступ по имени. Поскольку вы уже статически объявляете testclassb в качестве зависимости, не должно быть причин не использовать статическую переменную TestClassB.

Однако require.js позволяет синхронно require() уже загруженных модулей, так что вы можете также использовать

new (require("testclassb"))(); 
+0

Спасибо, Yeh Я не люблю его ТБХ, но объект, который будет экземпляр определяется по передаче данных через сокет. Поэтому я хотел избежать неприятной тонности логики, поэтому я выбрал хэш для сопоставления строк с объектами. Http://pastie.org/7452137 – Rob

+0

Да, это то, что вы всегда можете делать (и что правильно делать в этом случае) :-) – Bergi

Смежные вопросы