2015-09-27 2 views
0

У меня есть модуль, как это:Возможно ли наследовать модуль в Javascript?

var myModule= {}; 

(function(exports){ 

    init(); 

    exports.doSomething= function(){ 
     return "test"; 
    }; 

    function init(){ 
     initSubscribers(); 
     initListeners(); 

     initForAdmins();//just for the admin 
    } 

    //... a lot of functions that maybe doing things depends on if user is admin or normal user 

})(myModule); 

У меня есть 2 веб-страницы: «Обычная страница» использование «MyModule» для обычного пользователя и «Администратор страницы» Использование «MyModule» для администратора.

Некоторые части модуля используются обоими (обычным и административным пользователем), но некоторые детали специфичны для типа пользователя.

Я хотел бы создать 2 модуля (myNormalModule и myAdminModule), который наследуется от общего модуля (с общей функцией).

Мне кажется странным «наследовать от модуля».

Моим общим моделям должен быть объект или он может быть модулем?

+0

«Модуль» в Javascript - это всего лишь объект/шаблон, который следует определенным правилам. – user2864740

+0

Хорошо, но если 5 модулей наследуют в то же время от 1 модуля, для каждого модуля нет контекста. Они имеют один и тот же контекст, чтобы получить доступ к тем же данным. Его почему на мой взгляд наследовать модуль не удалось. – riwanab

+0

Я согласен с тобой, и это то, что я сделал. Но в моем случае у него есть модуль «Магазин», чтобы купить какой-то продукт (поэтому модуль использует разные объекты внутри). Но теперь, если вы хотите создать новые модули (например, ShopForWowen и ShopForMen), которые используют модуль «Магазин», полагаю ли я переопределить модуль Shop в объект Shop, который нужно наследовать? – riwanab

ответ

2

Вы создаете типы объектов, а затем наследуете их. Вы не наследуете модуль. Один модуль может использовать другой модуль в своей собственной реализации, но это не наследование.

Итак, сначала создайте структуру объекта, которую вы хотите использовать (включая наследование, если необходимо), а затем организуйте ее в соответствующие модули. И, организуя свой код в модулях, модуль может определять тип объекта и затем экспортировать (например, общий) этот тип объекта, а затем другие модули могут либо использовать его, либо наследовать от него. Но сам модуль является всего лишь структурой организации кода, это не структура наследования.

Итак, я предлагаю вам разобраться в иерархии объектов (включая наследование), прежде чем беспокоиться о модулях и как только это будет разработано, вы можете организовать его во всех присваиваемых модулях. Например, если все типы объектов для этой конкретной проблемы почти всегда будут использоваться вместе, то все они могут быть объединены в один модуль.

Но, если некоторые типы объектов для этой проблемы могут использоваться сами по себе, тогда может иметь смысл разбить их на свой собственный модуль для каждого из них, используя только подходящие части.

Если у вас есть контекст, который вы хотите разделить между модулями, то есть несколько способов сделать это в зависимости от того, что именно и как оно используется. Контекст может принадлежать базовому объекту, из которого наследуются все остальные объекты. Или, если контекст более глобальный, его можно сохранить в одном модуле, а затем экспортировать в другие модули, которые хотят получить к нему доступ.