javascript — requireJS: портирование классов C ++, не нужно дважды указывать имя класса

Я портирую проект C ++ на Javascript. Я хотел бы сохранить объектно-ориентированный дизайн, поэтому я решил использовать requireJS для организации портированных классов как модулей.
Я моделирую наследование следующим образом:

define(
[
],

function()
{
'use strict';

function Base( arguments )
{
}

function Inherited( arguments )
{
Base.call( this, arguments );
}

Inherited.prototype = Object.create( Base.prototype );

return {
Inherited   : Inherited
};
});

Допустим, я сохраняю этот модуль в файле ‘inherited.js’ и требую его в другом модуле:

define(
[
'inherited'
],

function( Inherited )
{
'use strict';

function Whatever( arguments )
{
var inherited = new Inherited.Inherited( arguments );
}

return {
Whatever    : Whatever,
};
});

Что меня сейчас беспокоит, так это то, что я должен указывать имя класса дважды при создании объекта, один раз в качестве имени модуля и один раз в качестве имени функции / класса.

Вместо этого я хотел бы иметь возможность позвонить:

var inherited = new Inherited( arguments );

Я могу добиться этого, возвращая анонимную функцию в файле «текаризованный.js », но тогда я больше не могу определить зависимость наследования.

Я понимаю, что идея модулей состоит в том, чтобы предотвратить загрязнение глобального пространства имен — имейте в виду, что приведенный выше код используется только в моей библиотеке, которая упакована в один модуль, прежде чем будет использована в реальном приложении.

Так, чтобы создать экземпляр функции / класса Inheritated Я должен был бы напечатать Library.Inherited.Inherited но я бы предпочел Library.Inherited.

Есть ли другой способ сделать это?

1

Решение

Просто верните унаследованную функцию конструктора:

define(function () {
function Inherited() {
}

Inherited.prototype = {
};

return Inherited;
});

Значения модуля экспорта могут быть возвращаемого типа.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]