JS и его "недостатки"
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.123] |
|
|
Правила раздела:
| Страницы: (66) « Первая ... 57 58 [59] 60 61 ... 65 66 ( Перейти к последнему сообщению ) |
JS и его "недостатки"
|
Сообщ.
#871
,
|
|
|
|
Дайте, пожалуйста, ссылки на ужасные примеры JS, вроде тех, что приводятся на презентациях КофеСкрипт и других, решающих проблемы JS языках.
|
|
Сообщ.
#872
,
|
|
|
|
|
Сообщ.
#873
,
|
|
|
|
Serafim, так в новом js'е же будут классы?
|
|
Сообщ.
#874
,
|
|
|
|
Serafim, а не помнишь что-нибудь по приведению типов, проверок на равенство?
|
|
Сообщ.
#875
,
|
|
|
|
Цитата Red @ Serafim, а не помнишь что-нибудь по приведению типов, проверок на равенство? приведение типов только одно: undefined -> void 0; проверка на равенство: is -> === isnt -> !== как пример: кофе ![]() ![]() a = (b) -> if b isnt undefined then 1 else 'asdasd'; js ![]() ![]() var a = function(b) { if (b !== void 0) { return 1; } else { return 'asdasd'; } }; Добавлено Цитата D_KEY @ Serafim, так в новом js'е же будут классы? не JS, а EcmaScript 5, т.е. где-то лет через 10 можно будет наконец подумать об их использовании Добавлено Не думаю что это будет серьёзным нарушением трудового договора, запощу кусок кода на кофе, который писал я: ![]() ![]() ### Класс соединения с сервером ### class Connection # Время реконнекта при обрыве соединения @RECONNECT_TIMEOUT = 60000 # Отображать ли логи сокета @SHOW_LOGS = true ### Сообщения логов @string: Logs ### @LOG_CREATE = 'Создание соединения:' @LOG_OPEN = 'Выполнено подключение к сокету.' @LOG_CLOSE = 'Отклюение от сокета.' @LOG_ERROR = 'Сервер не отвечает.' @LOG_RECONNECT = 'Переподключение к серверу после ' + @RECONNECT_TIMEOUT + ' миллисекунд.' @LOG_INPUT_MESSAGE = 'Ответ сокета:' @LOG_OUTPUT_MESSAGE = 'Отправка сообщения:' @LOG_SET_TIMEOUT = 'Смена таймаута переподключения к серверу: ' ### Ошибки ### @ERR_MESSAGE_SEND = 'Невозможно отправить сообщение. Нет подключения к серверу.' @ERR_SOCKET_CLOSE = 'Невозможно закрыть соединение. Соединение отсутствует.' ### Статусы сокета @string: Status ### @STATUS_CLOSED = 'STATUS_CLOSED' @STATUS_CONNECTED = 'STATUS_CONNECTED' ### Создание нового соединения @string host: Адрес соединения @string id: Идентификатор соединения @return object Connection ### constructor: (host, id = undefined) -> # Кодировать ли данные сокета @encode = true # # ID соединения @id = if id is undefined then id = Utils.uniqueId('', 4) else id # Хост (адрес) соединения @host = host # Объект соединения @channel = {} # Триггеры @triggers = onopen: [] # открытие onclose: [] # закрытие onmessage:[] # входящее сообщение onreconnect: [] # Одноразовые триггеры (срабатывают один раз) @onceTriggers = onopen: [] # открытие onclose: [] # закрытие onmessage:[] # входящее сообщение onreconnect: [] # Текущий статус соединения @status = Connection.STATUS_CLOSED setReconnectTimeout: (time) -> @log(Connection.LOG_SET_TIMEOUT, time) Connection.RECONNECT_TIMEOUT = time ### Подключение к серверу @callable cb: Коллбек на откртие ### connect: (cb = (->))-> @log(Connection.LOG_CREATE, @host) delete @channel @channel = new WebSocket(@host) @channel.onopen = (event) => @log(Connection.LOG_OPEN, event) @status = Connection.STATUS_CONNECTED cb() @triggers.onopen.each (foo) -> foo(event) @onceTriggers.onopen.each (foo) -> foo(event) @onceTriggers.onopen = [] @channel.onmessage = (event) => message = if @encode then Utils.decodeData(event.data.replace(/\n/g, '')) else event.data @log(Connection.LOG_INPUT_MESSAGE, message) @triggers.onmessage.each (foo) -> foo(message) @onceTriggers.onmessage.each (foo) -> foo(message) @onceTriggers.onmessage = [] @channel.onclose = (event) => @log(Connection.LOG_CLOSE, event) @status = Connection.STATUS_CLOSED @triggers.onclose.each (foo) -> foo(event) @onceTriggers.onclose.each (foo) -> foo(event) @onceTriggers.onclose = [] # RECONNECT @log(Connection.LOG_RECONNECT, @host) if @reconnectTimeout then clearTimeout(@reconnectTimeout) @reconnectTimeout = setTimeout => delete @reconnectTimeout @reconnect(event) , Connection.RECONNECT_TIMEOUT ### Переподключение соединения @return $this ### reconnect: (event) -> if @status is Connection.STATUS_CONNECTED @channel.close() else @connect() @waitOpen => @triggers.onreconnect.each (foo) -> foo(event) @onceTriggers.onreconnect.each (foo) -> foo(event) @onceTriggers.onreconnect = [] return @ ### Добавление триггера на открытие соединения @callable trigger: Коллбэк @return $this ### onopen: (trigger) -> @triggers.onopen.push trigger return @ # @alias onopen: Срабатывает только один раз waitOpen: (trigger) -> @onceTriggers.onopen.push trigger return @ ### Добавление триггера на переподключение соединения @callable trigger: Коллбэк @return $this ### onreconnect: (trigger) -> @triggers.onreconnect.push trigger return @ ########## И Т.Д. ############ Кто бы что не говорил, но это нагляднее и круче всяких там JS, просто нужно привыкнуть |
|
Сообщ.
#876
,
|
|
|
|
Отклюение от сокета говоришь...
|
|
Сообщ.
#877
,
|
|
|
|
Цитата Uncle_Bob @ Отклюение от сокета говоришь... Это еще не самое страшное... Я как то написал "сумка" без буквы мэ.. Хорошо было когда программа выдала "Су |
|
Сообщ.
#878
,
|
|
|
|
Да и сам термин "отключение от сокета" странный. Есть открытие сокета, закрытие...
|
|
Сообщ.
#879
,
|
|
|
|
Правильно будет: отлучение от сокета.
|
|
Сообщ.
#880
,
|
|
|
|
Цитата applegame @ Правильно будет: отлучение от сокета. Лечится экзарцизмом? |
|
Сообщ.
#881
,
|
|
|
|
Да мне пофигу, пусть хоть отречение - это логгирование всего-лишь
|
|
Сообщ.
#883
,
|
|
|
|
Боянчик, но смищной. |
|
Сообщ.
#884
,
|
|
|
|
[FAQ] Coffee, другой JS
Набросал небольшой обзорчик, просьба не тыкать сильно палками, если только конструктивно |
|
Сообщ.
#885
,
|
|
|
|
На кол Якина!
|