Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.12.2011, 16:18
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от B@rmaley.e><e Посмотреть сообщение
+1
Зачем создавать метод, который будет вызван всего один раз (а потом ещё и самоликвидируется)? Лучше сразу сделать анонимную функцию, которая будет собирать и возвращать объект.
покажи твою версию реализации этого примера
Ответить с цитированием
  #12 (permalink)  
Старый 28.12.2011, 16:26
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 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.
Ответить с цитированием
  #13 (permalink)  
Старый 28.12.2011, 17:26
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 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
			}
		};
	}
)();

?
Мне так читать проще.
Ответить с цитированием
  #14 (permalink)  
Старый 28.12.2011, 17:41
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

B@rmaley.e><e так код труднее читать (минимум, только мне). когда функции приведены похожим списком, они как-то легче усваиваются. плюс, неужели так тяжела инициализация и удаление свойства у объекта?

минусом объекта с инициализатором является, конечно, плохая его усваиваемость, если программист не понимает, с чем имеет дело. потом идёт все как по маслу.

и ещё один минусом будет использование одной "приватной" переменной несколькими функциями. для этого инициализирующийся объект не предназначен, а вот анонимная исполняющаяся функция - как раз для этого подходит!

GuardCat, приведённая вами одноразовая фабрика объектов - золотая середина между самоисполняющейся функцией и самоинициализирующемся объектом. )

Последний раз редактировалось melky, 28.12.2011 в 17:43.
Ответить с цитированием
  #15 (permalink)  
Старый 28.12.2011, 17:46
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от melky
так код труднее читать (минимум, только мне). когда функции приведены похожим списком, они как-то легче усваиваются. плюс, неужели так тяжела инициализация и удаление свойства у объекта?
+1
Ответить с цитированием
  #16 (permalink)  
Старый 28.12.2011, 18:00
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от melky Посмотреть сообщение
пиши в одно сообщение.
это то же самое, что и вариант GuardCat.
удали свое сообщение я удалил вопрос "чем код лучше"
Ответить с цитированием
  #17 (permalink)  
Старый 28.12.2011, 19:18
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 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 и делал то, что должен делать исходя из названия, вопросов бы не было. Получился бы такой объект-прототип, копию которого всегда можно получить.
Ответить с цитированием
  #18 (permalink)  
Старый 28.12.2011, 19:40
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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, как помню, всё отлично понимал. это было год назад.
Ответить с цитированием
  #19 (permalink)  
Старый 28.12.2011, 19:56
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от melky
она только удаляет себя и инкапсулирует создаёт переменную в глобальной области.
Этот подход тем более плох. Не надо решать за пользователя, куда записывать объект.
Сообщение от melky
вы хотите сказать, что IDE не поймёт кода и не подставит заверщение имени переменной в этом случае ?
Да. Возьмите свой исходный код, добавьте его в проект, а в соседнем файле наберите myToolbox.<Ctrl+Space>. Я буду сильно удивлён, если это сработает (и ещё больше, если при этом init'а не будет).
Ответить с цитированием
  #20 (permalink)  
Старый 29.12.2011, 00:38
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от B@rmaley.e><e Посмотреть сообщение
Этот подход тем более плох. Не надо решать за пользователя, куда записывать объект.Да. Возьмите свой исходный код, добавьте его в проект, а в соседнем файле наберите myToolbox.<Ctrl+Space>. Я буду сильно удивлён, если это сработает (и ещё больше, если при этом init'а не будет).
вижуал студио справился) нетбенс 701 справился
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паттерны проектирования kobezzza Оффтопик 9 22.07.2011 00:43