Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2015, 10:38
Профессор
Отправить личное сообщение для SunYang Посмотреть профиль Найти все сообщения от SunYang
 
Регистрация: 22.02.2008
Сообщений: 189

Реализация пространства имен
Возникла идея реализовать на сайте что-то вроде пространства имен.
Но есть сомнения правильности кода с точки зрения [нормального] программирования.

Допустим есть сайт 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 являются как-бы классами, и вроде получается что-то типа пространства имен.

Или это не очень правильное решение?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступность имен полей функций z4p Events/DOM/Window 3 09.05.2012 12:59
Пространство имен _SONY_ Javascript под браузер 17 02.08.2011 17:22
Отобажение XML используюя прстранство имен bayah Общие вопросы Javascript 0 04.08.2010 18:13
Реализация "Удалить"..."Восстановить" как вконтакте.ру Darooma2 AJAX и COMET 10 26.05.2010 13:41
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31