Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Одиночки. В чем разница? (https://javascript.ru/forum/misc/1268-odinochki-v-chem-raznica.html)

Snipe 03.06.2008 00:28

Цитата:

Сообщение от tenshi
сокрытие переменных приводит к тому, что мы не можем полноценно отлаживать приложение, ибо не можем получить полное состояние объекта

Если честно ни разу не приходилось отлаживать приложения.

Цитата:

Сообщение от vasa_c
Да. Описать эту возможность?

Если не трудно. Мне именно интересно сравнить оба подхода, ну и если есть возможность, то заодно и с простым JavaScript без инкапсуляции.

Цитата:

Сообщение от vasa_c
Обоснования были даны совершенно чёткие - страдает читабельность кода, скорость скрипта, количество используемой памяти.
Замыкания позволяют создать аналог скрытых свойств и перенос напрямую всех подходов из "классового" ООП обычно не приводят ни к чему хорошему.

Я имел ввиду, что никто не сказал "у меня есть опыт" или "я провел эксперимент и точно знаю, вот цифры".
Я тоже могу сказать, что IE со строками работает быстрее других браузеров, однако это только слова, надо их чем-то подкрепить (правда в моем случае нечем :) ).

По поводу читаемости и эстетики, если у вас используется несколько JS файлов, отдельно для комментариев, отдельно для меню и пр., можете поверить на слово, без инкапсуляции код будет читаться гораздо сложнее чем с (можете, правда, и не поверить). Вполне допускаю, что будет несколько функций с одинаковыми именами. И чем больше проект, тем сложнее будет слдеить за отсутствием повторов. А если использовать библиотеки со стороны, у которых тоже все функции вывалены прям так...
Так что предлагаю тему читаемоости закрыть сразу и больше к ней не возвращаться. Делали - читаемо. :)

Цитата:

Сообщение от tenshi
такой подход не может быть уместен, ибо все методы создаются заново при каждом инстанцировании объекта.

На какой пост ответ? :confused:

Вот это я понимаю тема, интересно обсудить, а то все "как сделать, чтоб onclick работал?" :)

Продолжаем разговор.

Dmitry A. Soshnikov 03.06.2008 01:13

Цитата:

Сообщение от Snipe
Я имел ввиду, что никто не сказал "у меня есть опыт" или "я провел эксперимент и точно знаю, вот цифры".

"У меня есть опыт и я провел эксперимент и точно знаю" то, о чем написал Вам уже два раза. =)

Snipe 03.06.2008 01:28

Цитата:

Сообщение от Dmitry A. Soshnikov (Сообщение 2790)
"У меня есть опыт и я провел эксперимент и точно знаю" то, о чем написал Вам уже два раза. =)

О, это не к вам обращение. Вам как раз спасибо за объяснения! Была бы тут карма, поднял бы )))

Андрей Параничев 03.06.2008 01:44

Snipe,
По моему личному опыту, самый читабельный ОО код (в JavaScript) - когда весь объект представлен одним хэшем. Хотя из-за проблемы с запятыми, такой вид не очень удобен.

Snipe 04.06.2008 07:30

Раз:
http://habrahabr.ru/blog/webdev/43781.html
Два:
http://habrahabr.ru/blog/webdev/43805.html

tenshi 04.06.2008 12:24

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

конфликты имён решаются элементарно посредством неймспейсов.

при использовании замыканий для сокрытия приходится увеличивать число отступов у вложенных блоков. при количестве отступов > 3, код становится трудночитаем.

hogart 04.06.2008 13:27

tenshi, не знаю, у меня используются замыкания для сокрытия и число отступов очень мало где превышает 3.

Читаемость -- тема отдельной беседы. Кто-то например может ставить фигурные скобки в микрософтовском стиле, а лично мне такой код нечитабелен.

tenshi 04.06.2008 22:19

это пока у тебя скрипты маленькие...

hogart 05.06.2008 11:04

tenshi, конечно, маленькие -- каждый обьект в своем файле.

Kolyaj 05.06.2008 13:08

Цитата:

Сообщение от hogart
у меня используются замыкания для сокрытия

Т.е., если объект имеет 10 методов и создается 10 объектов, браузеру приходится создавать 100 функций вместо 10 возможных.

Читабельность, конечно, вопрос индивидуальный, но мне комфортней
var f = function() {};
f.prototype = {
  m1: function() {},
  m2: function() {},
  m3: function() {}
};
чем
var f = function() {
  this.m1 = function() {};
  this.m2 = function() {};
  this.m3 = function() {};
}


Часовой пояс GMT +3, время: 14:35.