 
			
				28.12.2011, 16:18
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.12.2011 
					
					
					
						Сообщений: 786
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	
		+1 
Зачем создавать метод, который будет вызван всего один раз (а потом ещё и самоликвидируется)? Лучше сразу сделать анонимную функцию, которая будет собирать и возвращать объект.
	 | 
 
	
 
 покажи твою версию реализации этого примера  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 16:26
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 ⊞ Развернуть 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.01.2010 
					
					
					
						Сообщений: 1,810
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
myToolbox = (function () {
	var o = {
		css: function (el, prop) { /*return css-prop*/
		},
		ajax: function (options) { /*make ajax-request*/
		}
	};
	var cache = {};
	o.getCache = function () {
		return cache
	};
	return o;
})();
myToolbox.ajax({
	url: "foo",
	async: true
}); //ajax-req.
myToolBox.css(document.body, "width"); // some width
myToolbox.getCache(); // {}
typeof myToolbox.cache // undefined.
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 17:26
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Просто любитель 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.09.2011 
					
					
					
						Сообщений: 300
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		А «o» несёт какую-нибудь смысловую нагрузку? Или можно делать так: 
myToolbox = (
	function () {
		var cache = {};
		return {
			css: function (el, prop) { 
				/*return css-prop*/
			},
			ajax: function (options) { 
				/*make ajax-request*/
			},
			getCache: function () {
				return cache
			}
		};
	}
)();
? 
Мне так читать проще.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 17:41
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 B@rmaley.e><e так код труднее читать (минимум, только мне). когда функции приведены похожим списком, они как-то легче усваиваются. плюс, неужели так тяжела инициализация и удаление свойства у объекта? 
 
минусом объекта с инициализатором является, конечно, плохая его усваиваемость, если программист не понимает, с чем имеет дело. потом идёт все как по маслу. 
 
и ещё один минусом будет использование одной "приватной" переменной несколькими функциями. для этого инициализирующийся объект не предназначен, а вот анонимная исполняющаяся функция - как раз для этого подходит! 
 
GuardCat, приведённая вами одноразовая фабрика объектов - золотая середина между самоисполняющейся функцией и самоинициализирующемся объектом.  ) 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось melky, 28.12.2011 в 17:43.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 17:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.12.2011 
					
					
					
						Сообщений: 786
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		так код труднее читать (минимум, только мне). когда функции приведены похожим списком, они как-то легче усваиваются. плюс, неужели так тяжела инициализация и удаление свойства у объекта?
	 | 
 
	
 
 +1  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 18:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.12.2011 
					
					
					
						Сообщений: 786
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от melky
			 
		
	 | 
 
	
		пиши в одно сообщение. 
это то же самое, что и вариант GuardCat.
	 | 
 
	
 
 удали свое сообщение я удалил вопрос "чем код лучше"  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 19:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 ⊞ Развернуть 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.01.2010 
					
					
					
						Сообщений: 1,810
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Livaanderiamarum
			
		
	 | 
 
	| 
		чем твой код лучше?
	 | 
 
	
 
 Тем, что там нет самоудаляющейся функции и используется более привычная большинству концепция самовызывающихся функций. 
	
 
	| 
		
			Сообщение от GuardCat
			
		
	 | 
 
	| 
		А «o» несёт какую-нибудь смысловую нагрузку?
	 | 
 
	
 
 В моём примере — нет. Оно написано так только для сохранения исходного стиля. 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		B@rmaley.e><e так код труднее читать (минимум, только мне).
	 | 
 
	
 
 А увидев код вроде 
var a = ({
 // сотни тысяч строк кода
Чем, Вы подумаете, будет a? Особенно если Вы программируете на JS пару месяцев и ещё не прочитали JavaScript Patterns Стефанова? Если (function () стало более-менее стандартным синтаксисом (и то  постоянно появляются вопросы в духе "Что значит (function () {})") для самовызвающихся функций, то ({ … }) не столь сильно распространено (Хотелось бы увидеть примеры его использования в каких-нибудь приличных библиотеках или JS приложениях).
 
Далее: IDE. Если среда и догадается каким-нибудь образом о структуре создаваемого объекта (очевидно не в исходном случае, т.к. там понять, куда будет записан объект, без анализа графа потока управления вряд ли получится). А уж догадаться о том, что метод в любом случае будет удалён и, как результат, его не нужно подставлять в какой-нибудь автокомплит, ещё труднее.
 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		неужели так тяжела инициализация и удаление свойства у объекта?
	 | 
 
	
 
 Проблема не в их легкости / тяжёлости, а в том, что непонятно, зачем их объявлять вместе с объектом, если они не будут частью него. Если бы этот метод назывался clone и делал то, что должен делать исходя из названия, вопросов бы не было. Получился бы такой объект-прототип, копию которого всегда можно получить.  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 19:40
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	
		А увидев код вроде
var a = ({
 // сотни тысяч строк кода
Чем, Вы подумаете, будет a?
	 | 
 
	
 
 ваш пример некорректен. инициализирующая функция не возвращает результат. она только удаляет себя и  инкапсулирует  создаёт переменную в глобальной области.
 
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	| 
		Особенно если Вы программируете на JS пару месяцев и ещё не прочитали JavaScript Patterns Стефанова?
	 | 
 
	
 
 с этим проблема, да. но это я уже расписал в своём сообщении  выше.
 
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	| 
		(Хотелось бы увидеть примеры его использования в каких-нибудь приличных библиотеках или JS приложениях).
	 | 
 
	
 
 oops... с этим проблема.
 
НО! активность использования каких-либо шаблонов проектирования не говорит о том, что "этот шаблон хороший, а этот плохой". все они реализуют одно и то же. Единственное, выбор человек делает в пользу вкуса. и поставленной задачи. 
 
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	| 
		Далее: IDE. Если среда и догадается каким-нибудь образом о структуре создаваемого объекта (очевидно не в исходном случае, т.к. там понять, куда будет записан объект, без анализа графа потока управления вряд ли получится).
	 | 
 
	
 
 хм. т.е. вы хотите сказать, что IDE не поймёт кода и не подставит заверщение имени переменной в этом случае ?
 
a = {
    test : "nice",
    magic : function(){
        return this.te*!*<CTRL+SPACE>*/!*
    }
};
PS Komodo Edit, как помню, всё отлично понимал. это было год назад.  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				28.12.2011, 19:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 ⊞ Развернуть 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.01.2010 
					
					
					
						Сообщений: 1,810
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		она только удаляет себя и инкапсулирует  создаёт переменную в глобальной области.
	 | 
 
	
 
 Этот подход тем более плох. Не надо решать за пользователя, куда записывать объект. 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		вы хотите сказать, что IDE не поймёт кода и не подставит заверщение имени переменной в этом случае ?
	 | 
 
	
 
 Да. Возьмите свой исходный код, добавьте его в проект, а в соседнем файле наберите  myToolbox.<Ctrl+Space>. Я буду сильно удивлён, если это сработает (и ещё больше, если при этом init'а не будет).  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				29.12.2011, 00:38
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.12.2011 
					
					
					
						Сообщений: 786
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	| 
		Этот подход тем более плох. Не надо решать за пользователя, куда записывать объект.Да. Возьмите свой исходный код, добавьте его в проект, а в соседнем файле наберите myToolbox.<Ctrl+Space>. Я буду сильно удивлён, если это сработает (и ещё больше, если при этом init'а не будет).
	 | 
 
	
 
 вижуал студио справился) нетбенс 701 справился  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |