Реализация пространства имен
Возникла идея реализовать на сайте что-то вроде пространства имен.
Но есть сомнения правильности кода с точки зрения [нормального] программирования. Допустим есть сайт app.ru, есть раздел продавца app.ru/seller/ есть раздел продавца со списком продуктов app.ru/seller/catalog/ Решено было сделать главный объект App в одном файле и объекты App.Seller для раздела app.ru/seller/ и App.Seller.Catalog для раздела app.ru/seller/catalog/, но, чтобы в этих объектах (свойствах App) объект App был доступен через this. Нормальна ли с точки зрения производительности и адекватности такая реализация? Код: 1. файл App.js (подключается на всем сайте) содержит основные действия для всего сайта: ;(function($, window){ // ... какие-то действия var AbstractApp = function() { this.module = module; this.app_type = app_type; this.action = action; }; // функции доступные в наследниках типа App.Seller и App.Seller.Catalog через this AbstractApp .prototype = { build_style : function() { // ... инициализация главного модуля } // .... и т.д. } // собственные свойства глобального App ( не доступны в дочерних классах ) var App = { Init : function() { //... this.set_events (); }, set_events : function() { // события для всего сайта } // .... } // чтобы можно было обратиться из подключаемых файлов window.AbstractApp = AbstractApp; window.App = $.extend(new AbstractApp(), App); })(jQuery, window); $(document).ready(function(){ // стартуем App App.Init(); }); 2. файл App.Seller.js подключается в разделе app.ru/seller/ (function($, window) { window.App.Seller = $.extend(new AbstractApp(), { // собственные методы и свойства для раздела app.ru/seller/ Init : function() { this.set_events(); }, set_events : function() { // события для раздела app.ru/seller/ }, }); })(jQuery, window); $(document).ready(function(){ // стартуем App.Seller App.Seller.Init(); }); 3. файл App.Seller.Catalog.js подключается в разделе app.ru/seller/catalog/ (function($, window) { window.App.Seller.Catalog = $.extend(new AbstractApp(), { // собственные методы и свойства для раздела app.ru/seller/catalog/ Init : function() { this.set_events(); }, set_events : function() { // события для раздела app.ru/seller/catalog/ }, }); })(jQuery, window); $(document).ready(function(){ // стартуем App.Seller.Catalog App.Seller.Catalog.Init(); }); Что получается: методы App.Seller и App.Seller.Catalog являются как-бы классами, и вроде получается что-то типа пространства имен. Или это не очень правильное решение? |
Часовой пояс GMT +3, время: 20:11. |