[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.40541 Reply
File: загруженное.jpeg
Jpeg, 30.91 KB, 241×346 - Click the image to expand
edit Find source with google Find source with iqdb
загруженное.jpeg
И мы продолжаем ликвидацию безграмотности, неспешные беседы и яростные дискуссии вокруг яваскрипта.

Предыдущий тред: >>31938
>> No.40542 Reply
Некий синопсис по итогам личного опыта и предыдущего треда.
> Привет, я новичок, хочу изучать программирование и в частности, яваскрипт. С чего мне начать?
Лучше не надо. Js содержит ряд дефектов в своем изначальном дизайне, вследствие чего освоение этого языка с нуля, без какого-либо знания ловушек и подводных камней программирования, создаст трудности буквально из ничего. Это потом-то с ними вполне можно мириться. Выберите для вашего первого раза лучше пайтон, си или яву.

Но если что, то наверное https://www.khanacademy.org/computing/cs/programming вам поможет.
> По долгу службы пришлось заняться этим вашим жс, испытал сильнейший дискомфорт. Что такое? Как же так? Почему нет так любимых мной фич X,Y,Z? Что за странная объектная система?
Похожесть жс синтаксисом на привычные языки обманчива. Это язык с довольно самобытными конструкциями, навроде прототипного наследования и вылепливания разных штук, вроде неймспейсов или классов при помощи акробатики с анонимными функциями и объектными свойствами функций. Там где в других языках class, instance, namespace - в жс по-разному используемый function. Нужно уделить этому N-ое количество времени, с нахрапу все понять получается далеко не у всех.

На крайний случай к вашим услугам https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-[...]to-js Но каждый элемент этого списка надо проверять на предмет не заброшенное академическое поделие ли это. Да и ни один из этих языков полностью от жс вас все равно не абстрагирует.
> Начал писать SPA, через 500 строк появилась "лапша" из асинхронных вызовов, "<p class='"+cssClass(item.type)+"'>"+item.content+"</p>". Спасите, помогите.
Ну вот и настала пора погрузиться в удивительный мир:
а) js-фреймворков: angular, ember, backbone, knockout
б) обещаний ( google://js+promises )
> Какие у вас в жс есть игорбиблиотеки?
Манипуляция с DOM-ом (достатать тот <a>, который расположен вниз на 4 <p> от <div> с классом 'santa-claus', содержащий в своем тексте слово 'cat'): jquery.com
Гуй: jquery.ui, qooxdoo, ...
Окошечный гуй в браузере (listbox, label, listview, grid, treeview, accordeon, button, ...) extjs
Языковые плюшки: sugarjs, underscore
Векторная граффика: raphaeljs
Диаграммы, чарты, графы (и герцогини) d3.js, processing.js
3D-игры: three.js
Звук: pico.js
  
Так же где-то на просторах валялись штуки для матричных вычислений и штуки вроде functional.js (с текстовыми лямбдами).
>> No.40547 Reply
> Тред про яваскрипт
> Js содержит ряд дефектов
а съеби-ка, дружок, в 99й год
>> No.40548 Reply
> мной фич X,Y,Z
типа реализации state одной строчкой?
>> No.40549 Reply
я бы дальше и побугуртил, и жизни поучил. но, ведь, незачем вообще.
>> No.40550 Reply
>>40547
Почему он должен съебать в 99й год?
>> No.40557 Reply
>>40547
Нет ты
>> No.40582 Reply
>>40547
Что в этом году хорошего?
>>40549
Лучше бы синопсис дополнил своим жизненным опытом, он бы тогда по крайней мере не вызывал у тебя бугурта.
>> No.40583 Reply
File: wpid-3eb1ea26736003a32f03fe38da3ce93f.jpg
Jpg, 72.19 KB, 541×277 - Click the image to expand
edit Find source with google Find source with iqdb
wpid-3eb1ea26736003a32f03fe38da3ce93f.jpg
Смотрите какая хорошая процедура
 function m(x){ return r = x, s = function (y) { s.r = (r||{})[y]; r = s.r; return s } }
И не надо никаких доменных специализированных конструкций типа a?.b?.c
 a = {b:{c:43}}
 < Object {b: Object}
 > m(a)('b').r
 < Object {c: 43}
 > m(a)('b')('c').r
 < 43
 > m(a)('b')('c')('раз два три четыре пять').r
 < undefined
 > m(a)('b')('c')('раз два три четыре пять')('(:').r
 < undefined
>> No.40609 Reply
>>40583
Я всегда считал что языки высокого уровня были разработаны для удобства чтения алгоритма человеком. Скажите, зачем вы превращаете код в этот вырвиглазный пиздец?
>> No.40610 Reply
>>40609
> Я всегда считал что языки высокого уровня были разработаны для удобства чтения алгоритма человеком
Пуристично, теоретично, трогательно и наивно. В основном, языки программирования высокого уровня полезны удобством написания алгоритма человеком. Чтение - это дополнительное, хоть и важное требование, причем тут тоже не все так просто - следует разделять чтение одним и тем же человеком, чтение разными человеками из одного коллектива, чтение разными человеками из одного общемирового профессионального сообщества, наконец чтение любыми разными человеками. + разрозненное по времени чтение.
> Скажите, зачем вы превращаете код в этот вырвиглазный пиздец?
В 1001-й раз про вопрос с ложной посылкой говорить не стану, чтобы не тратить время.

Лучше уж m(obj)('a')('b')('c').r, чем obj && obj.a && obj.a.b && obj.a.b.c
>> No.40613 Reply
>>40610
> Лучше уж m(obj)('a')('b')('c').r, чем obj && obj.a && obj.a.b && obj.a.b.c
Но ведь второе гораздо понятнее! Не приходится, например, вспоминать, что такое m, и почему кавычки не везде.
>> No.40615 Reply
>>40610

(a.b in a) && (a.b.c in a.b)

А у тебя и правда наркомания какая-то.

мимо

>>40613
Не обращай внимания, он илитствует и резонёрствует.
>> No.40617 Reply
>>40615
> (a.b in a) && (a.b.c in a.b)
a.b.c.d.e.f.g
>> No.40620 Reply
>>40610
> В основном, языки программирования высокого уровня полезны удобством написания алгоритма человеком. Чтение - это дополнительное, хоть и важное требование, причем тут тоже не все так просто - следует разделять чтение одним и тем же человеком, чтение разными человеками из одного коллектива, чтение разными человеками из одного общемирового профессионального сообщества, наконец чтение любыми разными человеками. + разрозненное по времени чтение.
Ты дебил, анон. Продолжай плодить удобный-для-написания-говнокод, и когда-нибудь к тебе домой придёт благодарный читатель-психопат с налитыми кровью глазами и с огромным тесаком в руках, которому выпала честь поддерживать твой проект. Возможно, это даже буду я, кто знает.
>> No.40621 Reply
>>40609
Ну и много ты такого кода видел во всех многочист\ленных либах и фреймворках .js? На чанах - сколько угодно. Не корми.
>> No.40633 Reply
File: 1341408588769.jpg
Jpg, 89.30 KB, 750×784 - Click the image to expand
edit Find source with google Find source with iqdb
1341408588769.jpg
>>40617
Напишу Статичный метод has/contains, принимающий первым аргументом объект, затем - иерархию объекта любой длины, например.
>>40621
Коффи, arrow functions.
"Многочисленных" либ не видел. Те, которые приходилось использовать, используют конвенции, чтобы код был читабельным. Сравни минифицированный скрипт и неминифицированный. Отступы, вменяемые имена переменных и функций, организация кода.
>> No.40634 Reply
>>40620
Вот-вот. Перечитай еще раз свое сообщение и пойми, что пуризм ни до чего кроме фантазий не доводит.
>> No.40635 Reply
>>40633
Ты ни то прочёл >>40621 как-то не так, ни то не можешь по-русски выражаться.
>>40634
Сколько строк было в самом большом проекте, который ты писал?
>> No.40638 Reply
>>40635
> Сколько строк было в самом большом проекте, который ты писал?
Где-то 900 тысяч.
>> No.40639 Reply
>>40638
На каком языке? Кроме тебя еще кто-то участвовал в проекте?
>> No.40640 Reply
>>40639
Участвовал. На языке программирования.
>> No.40641 Reply
>>40639
Но ты клонишь к полной ерунде и аргументации к человекам. Проблема пуризма не имеет никакого отношения к тому, кто ее озвучивает.
>> No.40642 Reply
>>40640
На каком языке программирования? Название языка скажи.
>>40641
Не знаю, о каком пуризме ты толкуешь, но знаю, что очень важно писать легкочитаемый код.
>> No.40643 Reply
>>40642
> На каком языке программирования? Название языка скажи.
И что тебе это даст? Ты осознаешь, что на задаваемые тобой вопросы можно дать только нефальсифицируемые ответы, из чего следует что неудобные тебе ты с легкостью сможешь объявить ложью? Ответь на эти два вопроса, после чего я скажу тебе название этого замечательного языка программирования.
> Не знаю, о каком пуризме ты толкуешь, но знаю, что очень важно писать легкочитаемый код.
Ну тогда перед тем как спорить неплохо бы прояснить диспозицию оппонента, а во-вторых важность легкочитаемого кода никто и не оспаривал, см. >>40610

"Языки высокого уровня созданы для удобного написания алгоритма человеком, а чтение - дополнительное, хотя и важное требование" вовсе не эквивалентно "читабельность кода не нужна" Такое lossy-сокращение семантики высказаваний оппонента - проявление небрежности. Будь аккуратен впредь, пожалуйста.
>> No.40644 Reply
>>40643
Я не спорю, я мимокрокодил и мне стало любопытно, что за проект с 900 тыс. строк кода, хочу, чтобы ты рассказал о нем как можно больше.
Тот фрагмент на джаваскрипте написан коряво, это и без пуризма ясно.
>> No.40645 Reply
>>40644
Я еще раз повторю, мне не жалко. Будь впредь аккуратен, внимателен.
> Я не спорю
> >>40641
> Не знаю, о каком пуризме ты толкуешь, но знаю, что очень важно писать легкочитаемый код.
>> No.40646 Reply
>>40645
Да ты заколебал со своим пуризмом. В общем, забей.
>> No.40661 Reply
File: orly-4.jpg
Jpg, 162.59 KB, 471×470 - Click the image to expand
edit Find source with google Find source with iqdb
orly-4.jpg
>>40613
> Но ведь второе гораздо понятнее!
>> No.40664 Reply
>>40661
Прицинь, как минимум обязательно хотябы функции m и переменным дать имена говорящие. По крайней мере m.
>> No.40697 Reply
Где вообще все доки по modernizr? Где указано, какое поле modernizr объекта тестит каждую конкретную фичу? Нет, ну серьёзно, что они все галдят и не пишут как таковых документаций исчерпывающих.
>> No.40698 Reply
>>40697
Читаешь базовые доки, а потом смотришь https://github.com/Modernizr/Modernizr особенно https://github.com/Modernizr/Modernizr/tree/master/feature-detects

Код - лучшая документация же. По крайней мере если он вменяемый. Не вижу особых проблем с этим.

Там много маленьких файлов вида
/*!
{
  "name": "WebGL",
  "property": "webgl",
  "caniuse": "webgl",
  "tags": ["webgl", "graphics"],
  "polyfills": ["jebgl", "webglcompat", "cwebgl", "iewebgl"]
}
!*/
define(['Modernizr', 'createElement'], function( Modernizr, createElement ) {
  Modernizr.addTest('webgl', function() {
    var canvas = createElement('canvas');
    if ('supportsContext' in canvas) {
      return canvas.supportsContext('webgl') || canvas.supportsContext('experimental-webgl');
    }
    return !!window.WebGLRenderingContext;
  });
});
>> No.40755 Reply
>>40698
> Код - лучшая документация же
Если он такой как у тебя ниже, то да. А если он как у него
> function m(x){ return r = x, s = function (y) { s.r = (r||{})[y]; r = s.r; return s } }
то нет. Хотя там уже никакая документация не поможет.
>> No.40756 Reply
>>40755
> А если он как у него
> > function m(x){ return r = x, s = function (y) { s.r = (r||{})[y]; r = s.r; return s } }
> то нет. Хотя там уже никакая документация не поможет.
Согласен. Но у Modernizr вроде бы норм код.
>> No.40971 Reply
Смотрите какие у меня получились звездочки
http://jsfiddle.net/8rsa87p5/1/
>> No.41078 Reply
Други, такая проблема. Серверу на ноде нужно отдавать странички без клиент-сайд рендеринга, для сео-дружелюбности, и для того, чтобы уменьшить начальное время загрузки сайта. Так вот, пока это просто статичные странички (в смысле скомпилил jade и забыл) - на клиентсайде можно обойтись pjax'ом, но в скором времени потребуется логика и на клиенте: всякие там аджакс-поиски-фильтры-формы-настройки - бог знает что, и для этого всего хотелось бы использовать mvc-фреймворк, которые, конечно, полагаются на клиент-сайд рендеринг по принципу "получил json @ рисую страницу".
И как мне это все совместить покрасивее? Кто сталкивался, как решал? Я понимаю, что можно собрать шаблон на сервере один раз опросив бд, а уже для виджета (поиск-фильтры-еще что) в шаблоне будут теги handlebars, например, с которыми потом сможет работать клиентсайд-фреймворк, который сделает запрос к api и т.д. Но... это как-то некрасиво выглядит, неправильно. Плюс, если вдруг не обойдется виджетами, и понадобится манипулировать данными скомпиленного шаблона? Это уже будет некрасота в квадрате.
Или я что-то не так понимаю или делаю, или слишком парюсь, и мой способ окей? Просто я почитал нитернет - там такое сейчас решается изоморфными фреймворками, которые для меня выглядят как ракетные технологии. К тому же, я боюсь, что сервер под них придется изрядно переписывать. Может, все-таки мне нужно собрать яйца в кулак и заюзать react пока не поздно, и приложение не превратилось из маленькой навозной кучи в большую?
Мне так не хватает совета спеца, я тут, на работе, совсем один среди пожимающих плечами на мои проблемы перлеров и пхпшников ;_;
>> No.41079 Reply
>>41078
http://derbyjs.com/ ? https://www.meteor.com/ ? Вот это точно космические технологии. С другой стороны они рендерят и на сервере и на клиенте одним кодом. Попробуй.

Я бы посоветовал тебе http://vuejs.org/ в качестве онли-клиентского фреймворка. Попробуй, ежели тебя не смутит, что ie8 оно не поддерживает.
>> No.41081 Reply
>>41079
Ну, это fullstack решения - я не готов модели и остальную серверную логику под них переиначивать (как самый особенный построил приложение вокруг монтируемых роутеров express'а. никто больше, блин, так не делает, у всех все проще).
Мне больше гибко-легкий react и аналоги видится такой волшебной палочкой, который поможет решить мою проблему, но про него я знаю мало, и насколько я понимаю, он тоже подразумевает определенную архитектуру приложения.

Про совет, спасибо, посмотрю, но чем он будет выигрышнее бэкбона/энгуляра с костылями? Просто вопрос скорости рендеринга здесь ключевой, и дублировать страницы для поисковиков отдельно от приложения тоже бы не хотелось.
>> No.41082 Reply
>>41078
Ну можно же разделить страницу на статическую и динамическую части.
Во многих фреймворках есть такая возможность.
>> No.41089 Reply
>>41082
Непонел, это как?
>> No.41090 Reply
>>41089
https://docs.angularjs.org/tutorial/step_00

О директиве ng-app:

This directive is used to flag the html element that Angular should consider to be the root element of our application. This gives application developers the freedom to tell Angular if the entire html page or only a portion of it should be treated as the Angular application.
>> No.41091 Reply
>>41090
Я посмотрел на доки angular, потом на доки vue, потом обратно на доки angular. Как вы с ним работаете, с этим вашим angular? Что может сказать angular-кун о vue? http://vuejs.org/
>> No.41096 Reply
>>41090
А, да, пока такой план и есть.
>>41091
В вуе датабиндинг сделан манки-патчингом геттеров-сеттеров, и все вообще как бы реактивно, а в энгуляре все строится вокруг цикла $digest, который проверяет все связанные модели-вью. Первое звучит симпатичнее второго, по-моему. Ну и еще, наверное, много всяких подобных исправлений и лучших реализаций в этом вуе, я далеко не читал.
Но это довольно легкий фреймворк, когда энгуляр претендует на рейлс от клиентсайда со встроенным и подключаемым всем-всем, активным сообществом, постоянно допиливающим модули. В не так же куча магии и хелперов как в рейлс. Короче, мне кажется, только на этом фреймворк и живет, потому что за реализацию и конкретные технические решения его последнее время только ругают.
>> No.41266 Reply
Добронодер, используешь ли ты промисы? Шо с ними вообще делать? Примеры похожи на использование async, но я так в них и не вкурю. Вот монгус, например, возвращает промисы, а у меня один хрен выходят пирамидки:
Role.findOne({name: 'accounter'}).exec(function (err, role) {    User.find({role: role._id}).exec(function (err, users) {
`...`
   }); }); Как такое выпряпляется с then?
>> No.41267 Reply
>>41266
Доброанон, эти "промисы" и рельсы проносятся мимо нас как болиды на скоростной трассе, зойчем их использовать до тех пор, пока никто ничего не закажет?
>> No.41268 Reply
>>41267
Заказывают работающие программы, твоё дело - запилить в срок и смочь перепилить и допилить потом.
>> No.41269 Reply
>>41266
Бле, сколько лет здесь, а в разметку не научусь.
>>41267
Мне с этим кодом еще доолго жить и на него глядеть, и хотелось бы, чтобы все сразу по уму использовалось, как создатели библиотеки подразумевали.
>> No.41306 Reply
Хэй, доброкодеры, гуманитарий, бросивший js, снова решил им обмазаться, и на очереди вопрос. Если я с помощью innerHTML вставляю большой кусок HTML'a, полученный через XHR, то он будет обработан этим, как его, DOM парсером?
>> No.41307 Reply
>>41306
Конечно будет, но события тебе в большинстве случаев вручную вешать придется.
>> No.41343 Reply
>>41307
> в большинстве случаев
Кроме >>41313
>> No.41344 Reply
>>41343
Дык в on нет никакой магии. Он просто вешает обработчики bubble фазы чуть выше того места, которое будет меняться, а потом проверяет, что элемент, которому шёл ивент удовлетворяет селектору. Всё это можно и руками сделать, просто муторно.
>> No.41346 Reply
>>41344
Вот потому и надо на жиквери делать, чтобы было споро, а не муторно.
>> No.41374 Reply
Анон, подскажи пожалуйста, что за фигня с этими регулярками? Почему данный скрипт выводит null? Они не могут в многострочность?
Да, я нуб в js.
<html><body>
<div>
...
...
...
</div>
<div>
...
...
...
</div>
<script>
var expr = /<div>.+?<\/div>/gm;
var res  = document.body.innerHTML.match(expr);
console.log(res);
</script>
</body></html>
>> No.41375 Reply
>>41374
Если в жабаскрипте по pcre, то надо s вместо m.
По-дефолту точка не матчит \n, s включает это.
А m для привязки ^$ к каждой строчке, а не начало-конец блока.
>> No.41376 Reply
>>41373
Простите, но зачем парсить хтмл регулярками?
>> No.41377 Reply
>> No.41381 Reply
>>41376
А чем его ещё парсить, если использовать DOM в этой ситуации невозможно?
>> No.41382 Reply
>>41381
Почему невозможно? Что за ситуация?
>> No.41383 Reply
>>41382
Например:
привязки к js-коду, который тоже придется потрошить
мильйоны вложенных тэгов без всяких селекторов
форматирование строчек через <br> с отсутствующими <br> для пустых значений и подобными развлечениями
или когда на странице видно соответствие полей и значений, но в норкоманской разметке этой связи не усматривается

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

Няшненький хтмл удобнее парсить через дом, конечно. Хотя всякие быстропарсеры что на регулярках, что на доме пишутся одинаково легко и быстро, и ломаются так же легко при изменениях.

мимо
>> No.41384 Reply
>>41383
Какие привязки, какие мильёны, чё ты несёшь? Задача какая? Какие забавы? Что вообще ты там делаешь, блядь? Приведи пример хотя бы. Я ни слова не понял.
>> No.41385 Reply
>>41384
Попробую поискать примерчик или два.
Задача, грубо говоря, датамайнинг с страниц с очень кривыми шаблонами или очень невалидного html.
>> No.41386 Reply
>>41385
Парсинг чужих сайтов? Там бы сразу и сказал. У самого были с этим проблемы. Я так и не понял, какаой всё-таки наилучий стек технологий и путь для парсинга товаров в сайтов. У меня всё получилось очень плохо по многим причинам.
>> No.41387 Reply
>>41386
Идеального решения нет. Потому что при использовании одного подхода придется городить огород из костылей для реализации отсутствующих возможностей.
Особенно при разработке всяких ололо-умных парсеров без привязок к конкретной разметке конкретного сайта.
Именно поэтому смешны эти выпады НИКОГДА НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ РЕГУЛЯРКИ ДЛЯ HTML!!!111
>> No.41388 Reply
>>41383
> привязки к js-коду, который тоже придется потрошить
Как в этом помогают именно регулярки?
> мильйоны вложенных тэгов без всяких селекторов
Используя xpath, можно без больших проблем искать table/tr/td[3]/table/tr/td[1]/text(), если знаешь где. Так что возникает тот же вопрос, чем регулярки лучше.
> форматирование строчек через <br> с отсутствующими <br> для пустых значений и подобными развлечениями
Я вот не помню, давно скрейпингом руки пачкал: ищутся ли по xpath разбитые <br> #text ноды, или они как в дом апи возвращаются одним куском? Если разбиваются, то не вижу проблемы.

Просто попытайся освоить какой-нибудь парсер, срсли. Грамотный парсинг снижает градус говнокодинга и повышает самооценку.
>> No.41389 Reply
>>41388
> Как в этом помогают именно регулярки?
Выбирают эмбеднутые массивы или блоки переменных, где твои ололо-парсеры тут?
> если знаешь где. Так что возникает тот же вопрос, чем регулярки лучше.
А если не знаешь и они могут менятся? Регулярки тут привязываются к контенту опять же.
> Если разбиваются, то не вижу проблемы.
Не разбиваются, видишь проблемы.

Последнее что пропустил?

Ты прям такой ололо-рокстар пришел и блеснул знанием. Парсеры решают определенный объем проблем, дальше идут такие же костыли.
>> No.41390 Reply
>>41388
регулярки есть в оюбом языке и могут работать быстрее, чем построение дома + ряд выборок.
>> No.41392 Reply
>>41391
> Ты теперь код регулярками парсишь?
А что, цеплять жабаскрипт машинку или даже браузер и исполнять его, вместо одной строчки?
> А что тебе мешает генерить новые селекторы для парсера?
То что оно может рандомно меняться в зависимости от выводимых данных, тебе придется всю эту говнологику реализовать у себя.
> Работают, только что проверил.
Ладно, а если они будут по рандому пропадать?
Т.е, если есть значение, то оно выводится с <br>, а если нет, то нет.
>> No.41393 Reply
Давайте поищем в интернете статьи про Эрика Мейера. Задача - выуживать статью в виде заголовок + тело статьи. Вот и поглядим, кто лучше - регулярки или дом.

Правда я с вами поиграть смогу только к концу недели, так что вы пока раскритикуйте затею как следует.
>> No.41394 Reply
>>41389
> Выбирают эмбеднутые массивы или блоки переменных, где твои ололо-парсеры тут?
Ты теперь код регулярками парсишь?
> А если не знаешь и они могут менятся? Регулярки тут привязываются к контенту опять же.
А что тебе мешает генерить новые селекторы для парсера?
> Не разбиваются, видишь проблемы.
Работают, только что проверил. Попробуй в хроме поискать $x('p-with-br/text()[2]') - получишь текст после бра.
>>41390
Парсеры тоже есть в любом языке. И регулярки тоже нужно уметь эффективно использовать.
Вообще, если из документа нужно выдрать одно значение, то с регулярками, наверное, проблем и нет, но если для какой-то определенной структуры документа нет парсера, и работать с ней нужно очень тщательно, я например, пишу свою грамматику, чаще с вкраплениями регулярок для работы с самыми базовыми нодами.
>> No.41395 Reply
>>41393
Разговор не о "что лучше для парсинга хтмл: регулярки или дом", а о "никогда нельзя пользоваться регулярками для хтмл".
>> No.41396 Reply
>>41388
> Используя xpath, можно без больших проблем искать table/tr/td[3]/table/tr/td[1]/text(), если знаешь где. Так что возникает тот же вопрос, чем регулярки лучше.
Если я правильно понимаю, проблема - парсить нечто в изломаных невалидных хтмл взятых в диких условиях. Там может вообще не доставать закрывающих тегов. В своё время я парсил хтмл, в котором были html-сущности(&votetahren;) без ";". По устаревшему стандарту двоеточее можно опускать в определённых случаях, но не во всех. Стандартная функция php не брала это говно. Тогда я испытал те ещё жопные боли.
>> No.41398 Reply
>>41392
Ты мешаешь жесткое с кислым. И регулярки, и некий парсер, ищущий по, например, xpath, решают одну и ту же задачу - выдирание строки из другой строки. Только второе было создано специально для поиска в строках, десятикилобайтных, структурированных тегами. Все.
Что у тебя там, блин, меняется, не меняется - ты для обоих случаев можешь использовать и то, и се в скрипте, в функции, которая вызывается на ивенте - они будут работать совершенно одинаково. Так что у тебя там проблемы не в разборе строки, и спор бессмысленный выходит довольно. Ты должен, скорее, спорить, что "поиск в декларативном стиле не всегда решает проблему веб-скрейпинга, и нужно писать скрипт". Так кто ж спорит. Только к теме это не относится.
>>41395
Единственный нерешаемый пример, что я увидел - парсинг джаваскрипта. Ну дык, джаваскрипт и не хтмл, лел.
>>41396
Я юзал nokogori, и он нормально вроде справлялся с незакрытыми тегами. Но для второго, да, я бы тоже в селектор регекс вогнал.
>> No.41448 Reply
Кто до сих пор не юзал browserify для управления зависимостями клиентского кода, попробуйте. Я сегодня избавился от запутанных и костыльных цепочек grunt-тасков, собирающих файл приложения, благодаря ему.
>> No.41450 Reply
>>41448
Спасибо, попробуем.

--

Кстати, раз уж тред подняли, смотрите какой ангуляр:
{{ Number(someValue) > 0 ? 'positive' : 'negative' }}
работать не будет, потомуе что в контексте шаблонов нету глобального window и Number не определен (вроде бы). Нужно процедуру городить. В принципе правильно конечно, процедуры понятнее получаются, особенно если их как следует называешь.
>> No.41451 Reply
>>41450
Ты это. Используй багофичи js:
> someValue = '1.23'
< "1.23"
> +someValue
< 1.23
> someValue|0
< 1
>> No.41453 Reply
>>41451
Ага, еще умножать на 1 можно. Но других запутаю же.

Лучше уж написать classify(someValue), понятнее выйдет же.
>> No.41454 Reply
>>41450
Кстати, для ангуляра этот браузерифай не больно нужен: там своя система модулей-компонентов-иньекций, так что хватает просто все в один файл скинуть и минифицировать.
>>41451
Не очень понял, как это поможет.
>>41450
А ты можешь передать Number в область видимости $scope.Number = Number :DD но да, лучше функцию, и как меньше кода в шаблонах
>> No.41455 Reply
>>41454
Тьфу, понял.
Да, кстати, сколько читал стайл гайды к жсу, везде так советуют типы приводить.
>> No.41456 Reply
>>41455
> так советуют типы приводить.
Это тебя так приучают к яваскрипту, чтобы ты потом воспринимал конструкции вида push.apply как нечто понятно, само собой разумеющееся.
>> No.41457 Reply
>>41456
А что с ним не так? Это модная сейчас функциональщина из лиспоты. То ли ещё будет.
>> No.41458 Reply
>>41457
Все с ним норм. Для функциональщиков тем более, а вот всякие казуальные (казуальные!, а не те, которые linq пишут) ява/с#-няши будут долго разбираться что там куда залазит.
>> No.41479 Reply
File: 1419244387582.png
Png, 0.98 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1419244387582.png
Сижу курю уроки по яваскрипту с CodeAcademy, и один из примеров поставил меня в тупик:

// the original Animal class and sayName method
function Animal(name, numLegs) {
this.name = name;
this.numLegs = numLegs;
}
Animal.prototype.sayName = function() {
console.log("Hi my name is " + this.name);
};

// define a Penguin class
function Penguin(name) {
this.name = name;
this.numLegs = 2;
}

// set its prototype to be a new instance of Animal
Penguin.prototype = new Animal("someName",3);
var penguin = new Penguin("Gunter");

console.log(Penguin.prototype); // => { name: 'someName', numLegs: 3 }
console.log(penguin.prototype); // => undefined

Ведь prototype есть ссылка на объект "родитель", тогда почему для объекта-наследника penguin ссылка не пронаследовалась? Браузер chrome.
Раньше писал на компилируемых языках со строгой типизацией, никак пока не могу построить в голове объектную модель яваскрипта
>> No.41483 Reply
>>41479
penguin и Penguin ВНЕЗАПНО два разных объекта. Попробуй console.log(penguin.__proto__ === Penguin.prototype);.
> // the original Animal clas
> // define a Penguin class
В js нет классов. Совсем нет. Есть только объекты. Хотя при желании можно называть классами всё, что имеет свойство prototype. Любая функция всегда есть конструктор. Всегда. При этом функция это тоже объект.

И попробуй добавить:
function Penguin(name) {
   console.log(this.name); // вот это
   this.name = name;
   this.numLegs = 2;
}
И посмотри разницу между
Penguin.prototype = new Animal("someName", 3);
Penguin.prototype = Object.create(Animal.prototype);
и ещё можно пилить такую штуку:
Penguinum('ololo'); // угадай, что будет
Penguin.call({name: 'qwerty'}); // trollface
Кроме того эквивалентны:
penguin.sayName('lol');
Animal.prototype.sayName.call(penguin, 'lol');
Хотя это можно поменять:
Penguin.prototype.sayName = function(){}; // изменим все экземпляры penguin. И новые и старые.
penguin.sayName = function(){}; // изменим только один экземпляр penguin
>> No.41500 Reply
>>41483
Спасибо за ответ. Про call и apply я покурю потом более внимательно.
Я просто ожидал на строчку console.log(penguin.prototype); что-то в духе [Function: Penguin], а там андеф. Пойду поищу что-нить об объектной модели жаваскрипта.
>> No.41502 Reply
Раньше не использовал js-фреймворки типа ангуляра и бекбона. Почитал про Vue.js. Но меня смутила одна вещь. Можно ли в Vue при инициализации объекта, чтобы объект брал данные не из объекта передаваемого через конструктор, а читал само первоначальное состояние DOM? Думал, смогу быстро прикручивать его местами в своём проекте, но так это уже отменяет всю простоту. Потому, что изначально данные формируются пхп на самой странице, а манипулировать ими в js надо уже потом.
>> No.41508 Reply
>>41502
Это плохая идея. Любые mv- фреймворки на клиенте для того и созданы, чтобы не мешать все подряд в представления.
Попробуй сначала какой-то изолированный виджет на вуе накалякать или отдельную страницу, типа корзины в магазине, или что там у тебя еще не готово. Построй апи, которые будут отдавать данные, изолируй виджет от жикьюрьной лапши, нарисуй шаблон, напиши директивы - короче, попробуй сделать для тренировки все по уму.
>> No.41509 Reply
>>41508
Честно говоря, мне бы это пригодилось на работе, а не для тренировки. У меня есть уже имеющиеся круды с таблицами на Yii и отчеты. Мне стало нужно много извращаться всяким перетаскиванием строк в таблице и прочим таким и я заметил, что джаваскрипты ужасно организованы и очень долго пишутся с кучей постоянных обращений к ДОМу непосредственно, одна лапша. Я думал, с этим как-то можно справиться, привлекая какие-то фреймворки. Смысл в том, что построить апи для отдачи данных вообще не вариант. Джаваскрипты продолжают играть только вспомогательную роль.
>> No.41510 Reply
>>41508
Алсо, если все данные брать с АПИ, то это ж будет больше запросов со страницы, не повлияет на производительность? Речь идёт не о SPA. Или нормально организовать жс можно только в SPA, что ли?
>> No.41511 Reply
>>41509
> построить апи для отдачи данных вообще не вариант
Таки почему нет?

В любом случае, если тебе не нужно работать с данными, а просто перемещать строки или красить - короче, с представлением работать, то тебе тогда ничего не мешает написать/взять директивы, чтобы описать эту таблицу красиво, в декларативном стиле без возюкания с домом и ивентами. Но если нужно писать фитры какие или сортировку, то брать данные из дома, чтобы потом их перезаписывать новыми, по-моему, будет оче хуево.
А плагины ты смотрел какие-нибудь жикьюревые для работы с таблицами?
>> No.41513 Reply
>>41510
Смотри как поделил веб-страницы на правых и неправых один умный дядька. Есть страницы, отображающие что-то статическое, какое-то конкретное состояние, например, страница блога, а есть страницы, содержащие пространство пользователя, например, дэшборд админки, доска в trello, етц, которому обмениваться емко данными с сервером дешевле, чем качать страницу по каждому чиху. Твоя таблица с отчетами, по-моему, больше относится ко второму случаю, и да, это такое мини-спа.
Если тебя настролько смущает лишний запрос на старте, можешь попробовать бутстрапить страницу начальными данными в json еще на сервере, а потом рендерить шаблон на клиенте. Но я считаю что один запрос погоды не делает (ты считал, сколько запросов у тебя идет на загрузку стилей и разных библиотек? Сомневаюсь, что один запрос в полкилобайта там самый тяжелый).
>> No.41514 Reply
File: talking_captcha.png
Png, 1.66 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>41502
> Можно ли в Vue при инициализации объекта, чтобы объект брал данные не из объекта передаваемого через конструктор, а читал само первоначальное состояние DOM?
Нет такого и вроде и в ангулярах нет. Но вручную распарсить DOM один раз в одном месте всёж легче, чем макаронный код поддерживать. Или можно прикрепить api сбоку, что проще, но немного увеличивает нагрузку на сервер. Или сразу вставлять json в страницу при загрузке.

Вообще vue лучше всего подходит в тех случаях, когда надо много кастомного и много редактирования прям вот здесь. Впрочем как и все реактивные фреймворки.

Лучше опиши чуть более конкретный пример. Могу пояснить чего, да как, нужен ли там именно vue и если нужен, то как его правильно приготовить.

>>41510
Зато можно реже перезагружать эту самую страницу. Визуально воспринимаемая производительность на клиенте повысится. На сервере может повыситься и понизиться в зависимости от конкретной задачи. Слушай >>41513-куна Хотя с чётким разделением я не согласен. Всегда есть промежуточные варианты.
>> No.41515 Reply
>>41513
>>41514
Мой тимлид был против ангуляра или бэкбона, говоря, что они тратят лишнее время на разработку и уменьшаю якобы гибкость. На сайте тупо в виде простых табличек и формочек со всякими финансовыми сущностями. А так же таблички, визуализирующие какие-то SQL-запросы в виде отчётов. В основном джаваскрипта мало. Но вот мне пришлось сделать, чтобы строки можно было добавлять и удалять. Добавлять в куче разных мест при этом. И ещё редактировать содержимое на лету. И сгрупироввывать и схлопывать строки. Тогда всё стало сложно. Но смысл остаётся в том, что сначала идёт предварительная загрузка полного списка сущностей, а потом уже добавление, удаление, редактирование строк. Я думал, раз Vue.js легковесный, то можно будет воспользоваться без перепланировки половины проекта и его структуры.
>> No.41516 Reply
>>41515
> уменьшаю якобы гибкост
Они таки уменьшают гибкость. Ровно до предела удобства. Слишком высокая гибкость это ад.
> Но вот мне пришлось сделать, чтобы строки можно было добавлять и удалять. Добавлять в куче разных мест при этом. И ещё редактировать содержимое на лету. И сгрупироввывать и схлопывать строки.
Добавил к стандартному примеру буквально джве строчки и получил добавление и удаление http://jsfiddle.net/lain8dono/2kqzhhq4/10/
Ещё в пару строчек можно реализовать редактирование.
> Я думал, раз Vue.js легковесный, то можно будет воспользоваться без перепланировки половины проекта и его структуры.
Смотря как оно сейчас организованно. Алсо можно же то, что ты берёшь с сервера, брать в json. Добавить параметр вроде example.com/path.brainfuck?json и впилить пару строчек, чтоб данные сериализовались не в html, а в json.
>> No.41529 Reply
File: 1419431598560.png
Png, 1.37 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1419431598560.png
>>41479
> Раньше писал на компилируемых языках со строгой типизацией, никак пока не могу построить в голове объектную модель яваскрипта
И сегодня вечером меня постигло озарение, все на самом деле невероятно просто.
В джваваскрипте НЕТ наследования, там ЕСТЬ возможность создавать объекты с произвольными прототипами.
>> No.41531 Reply
>>41529
А меня недавно постигло другое озарение - в джаваскрипте НЕТ объектов и методов, но ЕСТЬ хеш-таблички, лазающие в прототип за недостающими ключами и замыкания. Ибо эти "методы" не имеют совершенно никакого отношения к своему "объекту", а this определяется только в точке вызова.

x.foo() // в this будет x
f = x.foo;
f() // в this будет не x
>> No.41532 Reply
>>41531
И про f.call(x) не забудь.
>> No.41535 Reply
>>41532
Ну и про x.foo.bind(x) до кучи.
>> No.41573 Reply
Кун, который трогал vue. Как у тебя там дела?
>> No.41576 Reply
>>41573
В треде не один я интересовался им. Ну я пока оставил эту тему до того момента, пока мне не он не понадобится. Думаю, я найду ему применение. Я бы уже применил его, если бы знал о нём, когда он мне был нужен.
>> No.41713 Reply
Какой давности материалы по JS и HTML5 не будут устаревшими?
>> No.41714 Reply
>>41713
Отрицательной, лол. Смотря по каким разделам. В целом около двух-пяти лет инфа не слишком тухлая.
>> No.41889 Reply
Читаю серию статей вот этого яйцеголового про ES6 http://www.2ality.com/2015/01/es6-maps-sets.html
Велика вероятность, что где-нибудь в следующем году, неадаптированные разрабы будут ежедневно ловить летчика, читая сорцы es6-либ. Я уже ловлю: либо не понимаю, как использовать штуку, либо зачем. Например, зачем нужны WeakMap'ы? Или зачем нужны символы, если в жс отсутствует руби-проблема, где опасно сравнивать строки-ключи. Генераторы я осилил не с первой попытки осилил, хотя и знаком уже был с рубивским Enumerable, но теперь не знаю, где его и заюзать. Эти все новые штуки как будто сделаны для каких-то прогеров поумнее, не представляю, как из них извлекать выгоду.
>> No.41893 Reply
>>41713
Никакой, на самом деле.
>> No.41947 Reply
Здесь есть нодеры? Как вы организовываете модули?
У меня они больше похожи на наборы функций: например, если модуль-парсер должен загружать xml из файла а потом отдельными функциями доставать данные, то я боюсь прикреплять повсеместно используемый объект к модулю и передаю его всегда аргументом типа xml = parser.loadFile(path); products = parser.getProducts(xml). Просто я не очень понимаю, как работают модули, и что в итоге будет собираться GC, а что нет. Кого можно почитать на тему?

Кстати, сегодня вычитал лайфхак:
```
function ensure(notOkCode, notOkMessage, response, okFx) {
   return function(err) {
 if (err) {
   response.status(notOkCode).json({"message": notOkMessage});
 }
 else {
   okFx.apply(okFx, Array.prototype.slice.call(arguments, 1));
 }
   };
}
  
var ensureFound = _.partial(ensure, 404, "Not Found"),
ensureValid = _.partial(ensure, 400, "Bad Request");
   expressRouter.get("/api/ledgers/:id", function(req, res) {
   UserService.getLedgerById(req.params.id, ensureFound(res, function(ledger) {
res.status(200).json(ledger);
   }));
});
  
expressRouter.patch("/api/users/:id", function(req, res) {
   UserService.getUserById(req.params.id, ensureFound(res, function(user) {
UserService.updateUser(user, req.body, ensureValid(res, function(updated) {
  res.status(200).json(updated);
}));
   }));
});
```
И тут же подсел на lodash, теперь _ у меня в каждом модуле. Даже не знаю, как без без него раньше жил.
>> No.41971 Reply
>>41947
Вот еще из той же оперы
`async.parallel [
   _.partial saveToCollection, 'groups', parser.parseGroups(xml)
   _.partial saveToCollection, 'properties', parser.parseProps(xml)
   _.partial saveToCollection, 'products', parser.parseProducts(xml)
], (err) ->`

вместо

`async.parallel [
   (next) ->
saveToCollection, 'groups', parser.parseGroups(xml), (err) ->
  next(err)
saveToCollection, 'groups', parser.parseGroups(xml), (err) ->
  next(err)
saveToCollection, 'groups', parser.parseGroups(xml), (err) ->
  next(err)
], (err) ->`

Гениально, а?.. Здесь вообще кто-нибудь есть, кроме меня, устроившего бложик ._.
>> No.41975 Reply
File: 12958163173419.jpg
Jpg, 81.55 KB, 347×364 - Click the image to expand
edit Find source with google Find source with iqdb
12958163173419.jpg
Есть ли здесь няша, который поможет мне и объяснит пошагово, почему у меня ничего не работает?

Я хочу написать юзерскриптик, чтобы на Доброчане внешние ссылки открывались в новом окне, если я использую фрейм. Но я не могу осилить даже первую часть. Стянул сторонний примерчик и оформил вот так:
// ==UserScript==
// @name        Dobrochan Offsite Links
// @namespace   Dobrochan Offsite Links
// @description Force offsite links on Dobrochan to open in a new window.
// @include     *dobrochan.*
// @version     1
// @grant       none
// ==/UserScript==

//if (*dobrochan.*/.test(w.location.href)) {
var sCurrentHost = location.host;
	var arLinks = document.links;
	for (var i = arLinks.length - 1; i >= 0; i--) {
		var elmLink = arLinks[i];
		if (elmLink.host && elmLink.host != sCurrentHost) {
				elmLink.target = "_blank";
		}
	}
//}
Но у меня вообще ничего не взлетает. Скрипт просто не работает, совсем. Что я делаю не так?
Познания в js и скриптинге минимальные, на уровне хеллоуворлда. Программированием на сях и паскале/дельфи занимался довольно плотно, не дурак, что этот код делает понимаю. Я не понимаю, почему он не работает, и как именно оформить скрипт для того, чтобы он работал.
>> No.41976 Reply
>>41975
У меня срабатывает в лисе.
А в хроме там всякие анальные ограничения и вроде чуть другой синтаксис. Может в этом дело?
Добавь туда алерт и пробуй по разному.
>> No.41977 Reply
>>41976
> алерт
Есть же console.log()
>> No.41978 Reply
>>41975
> var arLinks = document.links;
Меняй на это
> var arLinks = document.getElementsByName("board")[0].contentWindow.document.links;
Объект document для каждого фрейма свой, поэтому ничего и не работало.
>> No.41979 Reply
Решил написать борду в функционально-реактивном стиле, вывихнул себе мозг и на сегодня сдался. Я понимаю в принципе, что нужно сделать для начала: вьюхи, которые будут стримить, например, добавление постов, и хранилище, которое будет стримить обновленные пачки постов, но как их друг на друга подписать этим беконом, как пушить ивенты, как по ивентам обновлять... завтра еще раз перечитаю и скумекать
https://github.com/raimohanska/todomvc/blob/bacon-jquery/labs/architec[...]pp.js
>> No.41981 Reply
>>41979
Цель? Убийство времени?
>> No.41982 Reply
>>41981
Сейчас все так или иначе передвигаются к флюксу, где генерится много кастомных ивентов, и никому, понятно, не нравится, как стандартному диспетчеру приходится ими управлять. Другие реализации что-то перенимают из фрп https://github.com/spoike/refluxjs , но там все равно остается императивный код. А то, что я видел, написанное на Rx и беконе выглядело очень клево, поэтому я решил попробовать написать крохотульку на чем-нибудь из них целиком - потом опыт пригодится.
Вот вдохновляющая статья: http://futurice.com/blog/reactive-mvc-and-the-virtual-dom
>> No.41983 Reply
Где можно покурить на тему всяких хитрожопых селекторов для выборки нужных элементов?
Алсо, пригодится и xpath, как я понимаю.
>> No.41984 Reply
>>41983
Это обычный CSS.
https://docs.webplatform.org/wiki/css/selectors
jQuery добавляет к css только совсем немного трюков.
> Алсо, пригодится и xpath, как я понимаю.
Сомневаюсь. Это какая-то старая ныне мало популярная нотация.
>> No.41985 Reply
>>41984
Ага, посмотрю.
А xpath изначально для поиска и работы с нодами, поэтому там возможностей в этом плане больше, для всяких нетривиальных вещей может сгодится.
>> No.41987 Reply
>>41985
Возможно, но учти, что xpath появился, когда были xslt и xml популярны и когда не было css3. Не было селектора > в css, например.
>> No.41988 Reply
>>41984
Она нынче малопопулярна, потому что сейчас в большинстве документов у каждоц ноды есть по классу, и цсс-селекторами легко обходиться. Но когда нужно вытащить третью текстовую ноду из пятого безмынного td, //tr/td[5]/text()[3] будет написать проще, чем $('tr td:nth-child(5) ')... блин, фиг знает, как тектовые ноды выдирать, лол.
С другой стороны, в доках, где нужно искать по айди/классам, выражения xpath выглядят издевательски: td[@class="med-speed"], и здесь с css будет намного удобнее. В итоге ты все равно будешь комбинировать обе нотации.
>> No.41990 Reply
>>41988
Ну так xpath для XML проектировали, а не для HTML с его классами.
>> No.41991 Reply
Вот, кстати, практическая задача. Надо забрать одним куском три div class="row", которые следуют за hr. Бывает меньше, надо именно с тремя.
Сможет css в такое?
>> No.41995 Reply
>>41991
Если такой язык начнёт такое мочь, то он станет неподъёмно сложным. И неизвестно ещё, как это повлияет на его скорость.
>> No.42000 Reply
>>41995
Я без всяких подвохов спрашиваю, просто мне надо и подобное, вот я и упомянул xpath в первом посте.
>> No.42001 Reply
>>42000
Я намекаю, что тебе таки придётся взять обычный императивный язык какой-то и писать. Ищешь все hr и смотришь, что там после них. Возможно есть какой-то более оптимальный по производительности способ, но это надо изобретать.
>> No.42002 Reply
>>42001
Есть подозрение, что xpath достаточно мощен для этого, просто его так нахапром не осилить.
Зато одним запросом без велосипедов.
>> No.42003 Reply
>>42002
Хуй знает, я вот с наскока не придумаю, как это xpath'ом сделать. Удвачу предыдущего постера: проще и быстрее будет забить и сделать программно.
>> No.42034 Reply
>>41991
Не может, нет селектора по номеру соседних узлов.
>> No.42059 Reply
Мам, гляди: я пишу хаскелль на джэ-эсе!
function* allNaturalNumbers() {
  for (let n = 0; ; n++) {
    yield n;
  }
}

let [x, y, z] = allNaturalNumbers(); // => x=0; y=1; z=2
А потом я занаглел и повесил фурьфокс :DDD
let [x, ...xs] = allNaturalNumbers(); // => zzzz... Хотя y вполне бы мог принимать остаток генератора, без первого значения, хм...
>> No.42153 Reply
File: talking_captcha.png
Png, 0.97 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>55200
> Это не хэловорлд. Я именно что хочу показать способ, как можно обернуть метод объекта в функцию, чтобы вызвать её по таймауту. В этом суть. У тебя есть другие способы?
ну так я предлагал же:
var Obj = {
    a: function(msg) { console.log(msg) },
    b: function(){
       function f() { this.a(' Runing ') }
       setTimeout(f, 2000)
    }
}
> Щито? ты не умеешь готовить объекты. Ты пытаешься вручную описать один-единственный объект, в котором перемешаны данные и функции, которые их обрабатывают. Так не надо делать.
Ну да, я как бы хочу задавать переменные внутри объекта, например
var _m = new Main()
_m.data = '0xff8200' 
// или даже вот так вот сразу new Main('0xff8200') но тогда чтобы сюда можно было и блоб и массив вставлять
_m.blob() //==> blob
_m.uint8() //==> uint8array
чтобы вычисления проводились внутри объекта, но что бы данные я мог свободно указывать.
> И да, замечание. Переменные, спрятанные внутри объекта, должен изменять только сам этот объект. Всё взаимодействие с объектом нужно вести через интерфейс, который предоставляет этот объект.
А как тогда работают всякие el.src = el.className = el.value = el.check = ?
> Чтобы знать, как работают прототипы, и как язык в целом работает.
Это даст понимание того, как работать с HTMLAudioContext DataView FileAPI ? Нет? Ну тогда зачем на это время тратить, по ходу использования со временем и так все стороны раскроются.
> Не 100кб, меньше. И от подключения этой библиотеки так много профитов, что они вполне окупают её подключение.
Почему тогда не обновляют доброчановскую? Потому что по любому что нибудь да деприкейтед и тут же отвалится, один профит ахуительней другого просто.

> Да ничего они не универсальные. Понадобится тебе показать все посты, в которых нет картинок, ты будешь новую функцию писать.
я сразу напишу три тогда:
function _hide(el){ el.classList.add('hide') }
function _show(el){ el.classList.remove('hide') }
function _shide(el){ el.classList.toggle('hide') }
последняя - если мне надо по нажатию на одну и ту же кнопку скрыть или показать в зависимости от того в каком они сейчас состоянии, но так бывает редко в основном нужно здесь скрыть там показать, а если здесь еще раз нажали там ничего уже не делать, чем это хуже jquery с его .hide() .show() ?
А еще если мне очень надо будет я могу и возврат дописать:
function _show(el){
   el.classList.remove('hide')
   return el;
}
//что бы еще потом с ним что нибудь делать:
_show(el).focus()
> Понадобится переставить посты так, чтобы сначала шли с картинками, а потом без картинок - снова будешь новую функцию писать.
Типа c jquery не надо ее писать для каждого элемента $('#blah:blah(.blah)').each(function(node){ ... })
> Ой, вряд ли. Код, который ты написал, ты небось даже не сохранил себе никуда, и следующий раз будешь писать его заново.
И да и нет, у меня все это есть уже и немного более лучше

И кстати (если что на будущее) не я тебя тут отговариваю от использования jquery а ты меня хочешь зачем то убедить что им надо пользоваться, непонятно только зачем тебе это.
>> No.42154 Reply
File: 1424106849943.png
Png, 0.80 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1424106849943.png
>>42153
Ветка порвалась. На что твой собеседник отвечал? Интересно посмотреть.
>> No.42155 Reply
>>42153
> Почему тогда не обновляют доброчановскую?
Работает - не трогай.
> var Obj = { a: function(msg) { console.log(msg) }, b: function(){ function f() { this.a(' Runing ') } setTimeout(f, 2000) } }
Ты забыл кое что. Внутри f this совсем не то, которое ты ожидаешь.
// надо так
       function f() { this.a(' Runing ') }
       setTimeout(f.bind(this), 2000)
// так
       var self = this;
       function f() { self.a(' Runing ') }
       setTimeout(f, 2000)
// или так
       function f() { this.a(' Runing ') }
       setTimeout(f, 2000, this)
> А как тогда работают всякие el.src = el.className = el.value = el.check = ?
Это эквивалентно такому коду:
el.check = ?
el.value = el.check
el.className = el.value
el.src = el.className
> Ну тогда зачем на это время тратить, по ходу использования со временем и так все стороны раскроются.
Если будешь знать всю базу js, то сэкономишь время.
> а если здесь еще раз нажали там ничего уже не делать, чем это хуже jquery с его .hide() .show() ?
Ни чем не хуже. Это также плохо.
> > Понадобится переставить посты так, чтобы сначала шли с картинками, а потом без картинок - снова будешь новую функцию писать.
> Типа c jquery не надо ее писать для каждого элемента $('#blah:blah(.blah)').each(function(node){ ... })
Можно написать функцию, которая генерит функцию для этих джвух вариантов.
> И кстати (если что на будущее) не я тебя тут отговариваю от использования jquery а ты меня хочешь зачем то убедить что им надо пользоваться, непонятно только зачем тебе это.
Вы оба неправы. Иногда стоит использовать именно jQuery. Иногда не стоит. По ситуации.

мимо
>> No.42156 Reply
Кому нах, может быть нужно, сколько весят джаваскрипты? При среднем весе страницы в 1-2Мб и тьме больших картинок повсюду, 100кб - это ничего. Детские игры в супер-кодера. Откуда у новичком такая популярность этой хрени?
>> No.42157 Reply
>>42156
Дело в прогрузке главной странице. Она должна грузиться моментально, иначе пользователь тупо закрывает ее.
>> No.42158 Reply
>>42156
Кстати да, вроде на бобробобре писали что если страница грузится дольше чем 0.3 секунды, то юзер начинает испытывать дискомфорт.
>> No.42159 Reply
>>42156
Если код слишком объёмный, то он написан неправильно. Скорее всего там кто-то слишком злоупотребляет ООП.
>> No.42160 Reply
>>42156
Не мода, но жикью 2.0 весит уже 200КБ в полной сборке.

Я вообще так обыно рассуждаю, подрубать его или нет: если нужен читабельный и поддерживаемый код в крупном приложении, юзаем; если скрипт в несколько строк и только для себя, пишем свои корявки под аджакс/формы.

Еще кстати, кастомная сборка jq с querySelector вместо sizzle и без ненужной ваты весит где-то 15КБ. Вполне юзабельно, по-моему.
>> No.42161 Reply
>>42157
1) Она загрузится до включения джаваскриптов, если поместить их в конец боди. Можно ещё как-нибудь отложить загрузку и закачать, когда понадобится, а не сразу при заходе не главную.
2) При использовании гугловского CDN высока вероятност, что у юзера уже будет в кеше jQuery
3) Ну ладно, вот тебе zepto.js. 25кб!

Не говоря уже о том, что 100кб всё равно скачиваются вполне быстро, не так это и много.

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

И я ничего даже не скажу про скорость и стоимость разработки с ней и без.
>> No.42162 Reply
>>42160
> уже 200КБ в полной сборке
Где 200? 80 же, вот я скачал. Что за полная сборка ещё?
>> No.42163 Reply
>>42161
Блин, да ещё даже не знал, что можно, оказывается, вообще жать gzipом ассеты. Тогда там вообще ноль почти выходит. 9кб у зепто. jq - 30кб - минификация + джзип.
>> No.42164 Reply
>>42162
Допёр. Это не полная сборка, а девелопмент-версия. Она отличается от минифицированный автоматической программой версии пробелами, переводами строк, отступами и комментариями и всяким таким. Это просто прогонка через авто-минимизатор, там нет урезания по функционалу.
>> No.42165 Reply
>>42155
> Работает - не трогай.
Все правильно, а то там плеер перестанет музыку играть или еще какая нибудь хуйня приключится. Только хорошо ли это?
> Ты забыл кое что. Внутри f this совсем не то, которое ты ожидаешь.
Говорили говорили и опять так же написал я про себя
var self = this; зачем писать? можно же сразу Obj.a()
> Это эквивалентно
> > el is not defined
- еще бы написал.
> Ни чем не хуже. Это также плохо.
В каком смысле? Что также плохо?
>> No.42166 Reply
>>42165
> Все правильно, а то там плеер перестанет музыку играть или еще какая нибудь хуйня приключится. Только хорошо ли это?
Это уже другая проблема.
> зачем писать? можно же сразу Obj.a()
А если не синглтон?
> В каком смысле? Что также плохо?
Написание своего велосипедного jquery вместо использования готового jquery.
>> No.42167 Reply
>>42153
Давай с главным разберёмся сначала. Вот посмотрим на твой код.
var Obj = {
    a: function(msg) { console.log(msg) },
    b: function(){
       function f() { this.a(' Runing ') }
       setTimeout(f, 2000)
    }
}
Вызываем Obj.b(). Интерпретатор взводит взводит таймаут на две секунды, по которому вызывает функцию f. Проходит две секунды, интерпретатор начинает исполнять функцию f. В этой функции он видит слово this. Слово this интерпретатор трактует как Window. Пытается вызвать Window.a, не находит такой функции и выдаёт ошибку.

>>42165
> var self = this; зачем писать? можно же сразу Obj.a()
А вот смотря где.
var Obj = {
    a: function(msg) { console.log(msg) },
    b: function(){
       function f() { Obj.a(' Runing ') }
       setTimeout(f, 2000)
    }
}
Вот такой код отработает нормально. Но это потому что Obj - глобальное имя. А что если тебе нужно несколько объектов типа Obj? Или что, если сначала ты назвал свой объект Obj, а потом решил называть его Obj1? Тебе придётся просмотреть глазами весь внутренний код объекта, чтобы исправить все упоминания Obj на Obj1. Поэтому использовать внутри объекта имя этого объекта - плохой, негодный способ.

Теперь перечитай пост >>d/55160
Переменная self и обращение к ней используются для того, чтобы интерпретатор в ходе выполнения скрипта сохранил контекст. При вызове колбэк-функции, this есть window, но self остаётся собой.
>> No.42168 Reply
>>42164
Там можно отрубать ненужные тебе модули. http://projects.jga.me/jquery-builder/
>> No.42169 Reply
>>42168
Можно натыкать из http://microjs.com/ только то, что нужно. Ну или самому написать всё это за часик другой, не ставя на паузу анимцо. И выйдет около пары килобайт на всё про всё.

>>42167
> Теперь перечитай пост >>d/55160
Тут я извиняюсь. Не заметил, что вы на другой доске общаетесь.
> А вот смотря где.
Это да. Зависит от контекста. Ещё есть call/apply.
> Но это потому что Obj - глобальное имя.
Немного не верно. Глобальный - это когда без var либо явно window.Obj.

встрявший в ваш разговор
>> No.42170 Reply
>>42168
Тогда и ещё меньше. Полная - 80-90, со всеми модулями, никак не 200. 200 - неминифицированный девелопмент, не ставят такое на продакшен. По твоей ссылке минифай галочка делает продакшен-версию.
>> No.42171 Reply
>>42169
Можно еще сказать "зачем использовать mv* фреймворк. Я эти фабрики сам за 5 мин напишу". Но в любом случае, все упирается в расширяемость и поддерживаемость. Если кому-то нужно будет работать с твоим кодом, он вольется намного быстрее, если он встретит дружелюбную архитектуру и знакомые апи, а не будет часами читать сорцы велосипедов и выяснять, почему в библиотеке, работающей с дом нет такого-то псевдокласса, или почему на хранилище нельзя повесить ивент с .once, а только с .on. И сам часто, расширяя функционал, простой и изящной, как казалось библиотеки, превращаешь ее в закостыленное, нечитаемое добро. Короче, если юзать велосипеды, то лучше, в каком-то изолированном коде, по-моему.
>> No.42172 Reply
>>42170
84320 (82K)
>> No.42173 Reply
>>42171
> Я эти фабрики сам за 5 мин напишу
У меня фабрик нет ни в моём коде, ни в коде исползуемых библиотек. ООП дерьмо не пройдёт.
> почему в библиотеке, работающей с дом нет такого-то псевдокласса, или почему на хранилище нельзя повесить ивент с .once, а только с .on.
В моём коде используется легковесная либа с реактивными биндингами на dom. Пару часов для прочтения всей документации вместе со всеми гайдами, всеми лучшими практиками и всеми известными багами. При этом во всём приложении new будет встречаться от силы раз десять. Приложение получается маленьким, логичным, быстрым и структурированным. Реактивность до третей космической. Меньше кода === меньше багов. Полные тесты всего приложения 146% coverage будут с твоё приложение подобного рода. Но тесты и нинужны ибо все ошибки можно выловить за пять минут даже после литра спирта, пущенного по вене.
>> No.42174 Reply
>>42173
Чем тебе не нравится ООП?
>> No.42175 Reply
>>42174
Не пойми меня неправильно. Мне не нравится, когда его слишком много, когда не к месту. Ну и некоторые части классического ООП ужасны. Особенно наследование, особенно через классы. Использовать только трижды подумав.
>> No.42176 Reply
>>42175
Год работаю веб-кодером. Ещё никогда такого не было, чтобы написанный код не обрастал фичами как снежный ком и ТЗ не менялось как ветер. И в итоге оказывается, что истыкивание какими-нибудь абстракциями всего и вся ради максимальной гибкости стало чуть ли не основным критерием выживаемости кода. Полгода в интерет-агенстве клепания сайтов-визиток и интернет-магазинов заказчикам и полгода разработки корпортала для большой компании, всё равно одна петрушка. Наследование почти спасает жизнь, делая всё реально гибким, без него бы писал и переделывал сотни и тысячи раз одно и то же.
>> No.42180 Reply
Вы что-то тут нафлудили.
>>42156
Ычую, конечно, но когда на вполне вменяемом нетбуке грузится жс сайта, потом кнопки "добавить, плюс один, ололо, вгугл", которые тащат свой жс, потом скрипты статистики, потом ещё всякая требуха три-четыре секунды, хочется взять и оторвать руки.
>>42161
async defer FTW.
> С тяжёлыми веб-прилоежниями, век которых наступает, уже не до этого.
Не сочтите меня за толстяка, но веб-приложения говно на пекарнях ниже core* и на мобильных приложениях имеют особенность очень долго перерисовывать DOM при большом количестве элементов. По-моему, это тупичок. И по-моему, именно поэтому на каждый чих у пользователей смартфонов приложения на каждый чих -- ютуб, сосач, вк.
> Сайт - это не страница, которая должна открытся
Да. Давайте ресайзать не только поля ввода, но и превью картинок, например, и посты на доброчане и размеры боксов с контентом -- очень не помешало бы. Но ведь так без костылей нельзя, а с костылями медленно. Веб сопротивляется попыткам превратить сайты в приложения.
>> No.42181 Reply
File: Ayana-3.jpg
Jpg, 133.79 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
Ayana-3.jpg
>>42176
И в итоге у вас получилась архитектура, состоящая из подключаемых модулей, плагинов, которые вы зойчем-то вынесли в абстрактные классы, и всё от них унаследовали.
коза.ебись (онегин);
Впрочем, это обычное дело для большинства современных языков. Программирования.
Когда-нибудь вы поймёте, но будет поздно.
>> No.42182 Reply
>>42181
> мы делаем вот так и у нас всё заебись
> нет-нет, вы ничего не понимаете, так делать нельзя
Окай.жпг
Я надеюсь ты не считаешь вакуумную функциональщину реальной альтернативой традиционному подходу
>> No.42183 Reply
>>42182
> Я надеюсь ты не считаешь вакуумную функциональщину реальной альтернативой традиционному подходу
Не знаю, как вы двое, а лично ясчитаю, что фанатичное использование только одного из джвух подходов есть вредно.

ООП - дерьмо.
Функциональщина - дерьмо.
Ещё что-то - дерьмо.
[Ваша любимая парадигма] - дерьмо.

Смешиваем в нужных пропорциях - получается няшно.
>> No.42184 Reply
>>42183
Но ведь дерьмо получается же!
>> No.42185 Reply
>>42184
Дерьмовое ассорти! Такой-то эстет.
>> No.42186 Reply
>>42183
> Функциональщина - дерьмо.
Обоснования, я полагаю не будет? Не в контексте "работаю год на сайто-параше, пыхыпы рулииит", а в более обширном?
>> No.42188 Reply
>>42186
Жсу недостает дохуища фич фп, которые дорубаются в библиотеках топором и на скотч. Эти все увеличивающиеся уровни абстракции производительности не добавляют, и те, кто захотел построить приложение на фрп-фреймворке, например, сталкиваются уже с проблемами с производительностью: если работать с беконом, например, как положено, в разросшемся приложении GC просто захлебнется в постоянно клонируемых объектах.
Ящитаю, все нужно употреблять к месту, не увлекаться чистотой функциональщины, к которой жс не приспособлен.
И да, ООП архитектуру намного тяжелее факапнуть, чем тот же флюкс, например, и читать ее людям намного привычнее. Так что я в том лагере, который за фп в локальном коде в виде промисов, лодеша, генераторов и за ООП в организации крупных кусков.
>> No.42189 Reply
>>42188
Слишком общо. Надо про конкретику говорить.
> Жсу недостает дохуища фич фп, которые дорубаются в библиотеках топором и на скотч.
Вероятно речь про работы над моноидами? Map\Reduce\filter. Судя по сырцам underscore сделано очень знатно и читабельно. Где топоры и скотч?
> Эти все увеличивающиеся уровни абстракции производительности не добавляют ...
Про производительность пока рано говорить, потому что функциональные структуры данных нуждаются в агрессивном кешировании со стороны компилятора, как, например, в dotc для скалы. Абстракции нужны, нужны типы, чтобы был type checker, который доказывал бы корректность существенной части кода. Это повышает порог вхождения, но делает код корректным и приближает светлое будущее, когда программирование будет на 100% фаном, а не 90% бдсм.
> Так что я в том лагере, который за фп в локальном коде в виде промисов, лодеша, генераторов и за ООП в организации крупных кусков.
Ты в том лагере, которые не доучили теорию. Ну а возможно виноват хаскель со своей модульностью, которой там нет лол. Но в более современных языках с этим все в порядке. Взять, например, скалу с sealed traits, implicits и прочее. Еще пара стандартов и JS тоже будет в God Tier.
>> No.42190 Reply
>>42180
> Ычую, конечно, но когда на вполне вменяемом нетбуке грузится жс сайта, потом кнопки "добавить, плюс один, ололо, вгугл", которые тащат свой жс, потом скрипты статистики, потом ещё всякая требуха три-четыре секунды, хочется взять и оторвать руки.
Начти разбираться, окажется, там у картинок размер уменьшен через цсс и все весят по метру. Или в жс написан какой-нибудь код, который перебирает все атомы солнца, чтобы анимацию прокрутить или высветить всплывающее окно. Или аяксом качают неизвестно что. Джейквери убирать - последнее дело. Ну я отписал выше, как сделать джейквери 30кб, какая есть либа меньше и как заставить её грузиться только после загрузки страницы.
> на каждый чих у пользователей смартфонов приложения
Ну то смартфоны, что ты хотел. Но вк и ютьюбом, вон, все пользуются как-то.
>> No.42191 Reply
>>42190
На смартфонах пользуют отдельное приложение для них, а не через браузер.
>> No.42192 Reply
>>42190
Прошу прощения, я писал пост, когда мне следовало идти спать. Мне кажется глупой идеей минифицировать скрипты, но совершенно не нравится, когда сайты грузятся несколько секунд.
Кстати, картинки замечательно грузятся неблокирующе. А вот скрипты сначала полностью исполняются, а потом продолжается загрузка в случае, когда аттрибутов async у скрипта нет.
> Ну то смартфоны, что ты хотел.
Вы не можете быть серьёзным. Лопата за десять тысяч рублей обладает многоядерным процессором, парой гигабайт оперативной памяти и полноценной ОС. Не вижу, почему для комфортного просмотра сайта мне нужен corei7.
>> No.42193 Reply
>>42190
> как сделать джейквери 30кб
Можно ещё сильнее уменьшить, исползуя vanilla.js
>> No.42194 Reply
>>42192
> corei7
corei7 тебе там не нужен, не надо мне тут.
>> No.42195 Reply
>>42191
Я смотрю ютуб в браузере, приложение у них - ебаное говно, так что не надо тут.
>> No.42225 Reply
>>42181
> Когда-нибудь вы поймёте, но будет поздно.
Можно подробнее раскрыть это "клифхенгер"? А что произойдёт то?
>> No.42226 Reply
File: MFC.jpg
Jpg, 16.14 KB, 292×306 - Click the image to expand
edit Find source with google Find source with iqdb
MFC.jpg
>> No.42227 Reply
>>42226
Смищно. Говори языком нормально, бесишь.
>> No.42228 Reply
>>42227
Спокойней, бро. Хоть это и доброчан, но тут сюда залетают клоуны. Он же даже пасту не сгенерил, а ты уже полыхаешь.
>> No.42229 Reply
>>42228
Вот я и полыхаю, что не сгенерировал вообще ничего. Картинка, бля, ёпта.
>> No.42255 Reply
Чувак много и понятно писал про flux/reflux, если кто-то не понимает, с какого конца эту тему кусать.
http://blog.krawaller.se/posts/the-reflux-data-flow-model/
>> No.42317 Reply
Здравствуйте.
Никто не знает, почему:
$.get(url, function(html) {
   alert($(html).filter('.message').html());
});
возвращает undefined, а .text() – пустоту?
url Доброчана.
>> No.42318 Reply
>>42317
Пустая коллекция наверное, схорони скачанный html в глобальную переменную и по тестируй в консоли.
>> No.42324 Reply
File: 139504__safe_monochrome_queen+chrysalis_artist-col.jpg
Jpg, 85.57 KB, 490×729 - Click the image to expand
edit Find source with google Find source with iqdb
139504__safe_monochrome_queen+chrysalis_artist-col.jpg
>>42317
$.get(document.location, function(pony){
   var messages = $(pony).find('.message');
   console.log (messages.length)
});

Не знаю. Видимо, дело в filter. Я не помню совершенно, что он делает, а знатока строить не хочу.
>> No.42329 Reply
Конечно, я "за" большинство фич ецмаскрипт6, но местами мне больно смотреть, как наш маленький, изящный язык превращается в франкенштейна. Например, вот так достается итератор массива: находим в нем метод по стандартному символу "итератор", и выполняем.
let arr = ['a', 'b', 'c'];
let iter = arr[Symbol.iterator]();
Я так и не понял, почему это не просто метод, и нужно доставать обязательно символом.
>> No.42332 Reply
>>42317
Делай промежуточные console.log и локализуй место ошибки. Или вбивай в консоль команды и выражения и смотри. Или, если подключается где-то в файле, то вообще в хроме даже дебагер есть с брейкпойнтами и просмотром выражений.

Что ты смотришь на код, отлаживай.
>> No.42333 Reply
>>42329
Когда понимаешь, что даже первые вкладки гугла на инглише в авторитетных сайтах содержат всё устаревшее, начинает бесить уже, ей богу. Мозиловские гайды до сих пор ничё не знают про этот ваш итератор. С таким же успехом его вообще могло не существовать. Очередные чисто танцендентные фичи, существующе только в статьях на хабре, README.md Васи Пупкина и каких-то заумных претенциозных сайтов на бутстрапе истыканных красными флажками с надписью "not ready", "outdated", "in progress" и т.д.
Текст выше - только кандидат на моё мнение и вообще subject to change и возможно я думаю вообще по-другому

...................................................................
...................................................................
...................................................................
...................................................................
.Вторая половина этого поста ещё не написана....................
.Вы можете помочь проекту и дописать его ...................
>> No.42338 Reply
File: ~.png
Png, 141.60 KB, 674×1024 - Click the image to expand
edit Find source with google Find source with iqdb
~.png
>>42329
Я не понимаю, о чём ты, но выглядит отвратительно.
Кстати, теперь получается let и var, объявляющие переменную. Только сейчас осознаю, что это некрасивое решение.
>>42333
Чего ты.
>> No.42339 Reply
>>42338
> Чего ты.
Крик души. Простите.
>> No.42343 Reply
>>42333
Это блог ецмаскрипт6-популиста, все эти фичи в спецификации, а большая часть уже и реализована.
А если ты не используешь плюхи последней версии, которая работает во всех браузерах >IE9, ускоряют разработку и улучшают читабельность, ну, позор тебе.
>>42338
Мы всю жизнь пользовались двумя штуками для неизвестных вещей - null и undefined, двумя разными способами обьявления функций, но это же не баг, а фича? Но в этом случае, наверное, проще использовать let везде где возможно и var в исключительных случаях.
>> No.42344 Reply
>>42343
> работает во всех браузерах >IE9,
Только не говори мне, что ты путаешь ecmas5 и 6.
>> No.42345 Reply
>>42344
Нет, в смысле "последняя рабочая", это пока и есть 5.
>> No.42346 Reply
>>42345
А мы вообще-то про 6.
>> No.42347 Reply
>>42346
Окей, я слабо понимаю, что тот твой пост вообще означал, и по инерции защищаюсь от стандартного "врага прогресса", которые даже язык, устаканившийся четыре года назад отказываются знать.
В любом случае, эту спецификацию будут утверждать в ближайшие месяцы, и пора готовиться к тому, как нужно будет писать джаваскрипт в ближайшие годы. А некоторые популярные библиотеки для ноды используют новые фичи уже сейчас, и понимать, как работают твои инструменты, тоже не помешает.
>> No.42349 Reply
>>42343
> Мы всю жизнь пользовались двумя штуками для неизвестных вещей - null и undefined
Ну так уж сложилось.
> двумя разными способами обьявления функций
Одним же. Function Definition и Function Declaration выглядят одинаково и работают одинаково - вычисляются в вызываемые объекты первого класса.
>>42347
> пора готовиться к тому, как нужно будет писать джаваскрипт в ближайшие годы
Оптимистично. Даже в строгом режиме ничерта не пишут, мотивируя это неровной поддержкой среди браузеров и обратной совместимостью. А это очень классная штука для отладки исконно на динамическом языке.
> А некоторые популярные библиотеки для ноды
Кстати, а io.js не доводилось трогать?
>> No.42352 Reply
>>42349
> Function Definition и Function Declaration
Может он имеет ввиду function expression?
>> No.42367 Reply
Дано:
1) локальный необязательно, но желательно html-file
2) JS
3) Ресурс, который я не контролирую, отвечает JSON-ом
Как сделать cross domain get request с помощью JS?
>> No.42368 Reply
>>42367
Расширением.
Или, если браузер современный, а ресурс популярный и поддерживает CORS -- вроде imgur.com, заголовки для CORS выставит сам браузер.
>> No.42369 Reply
>>42368
> Расширением
Подробнее можно?
> ресурс популярный и поддерживает CORS
Ресурс популярный, но CORS не поддерживается, по сути URL часть внутреннего, но доступного API.
Задача получить и распарсить ответ
>> No.42370 Reply
>>42367
Глянь вдруг JSONP поддерживает.
>> No.42371 Reply
>>42369
Через бекенд с сервера без проблем, но джаваскриптом на прямую это была бы уязвимость, если был можно было бы любой аякс-реквест слать. Тогда бы можно было бы послать от твоего имени запрос кому-нибудь деньги перевести. Я думаю, он плагин для браузера имеет в виду.
>> No.42372 Reply
>>42371
> Я думаю, он плагин для браузера имеет в виду.
Аха.
> по сути URL часть внутреннего, но доступного API
Геморройный вариант - создать iframe, изменить ему location на нужный url и дальше что-то придумывать. Я никогда так не делал, камней не знаю.
>> No.42373 Reply
>>42372
Ко внутреннему документу iframe'а все равно не доступиться.
>> No.42374 Reply
>>42370
> Глянь вдруг JSONP поддерживает.
JSONP не поддерживает.

>>42372
>>42371
>>42370
Всем спасибо, в итоге нашел это: http://stackoverflow.com/questions/8537601/is-there-a-free-json-proxy-[...]jsonp
Yahoo's "YQL"
>> No.42453 Reply
File: 1.png
Png, 14.72 KB, 1112×621 - Click the image to expand
edit Find source with google Find source with iqdb
1.png
Здрасть.

Нужна ваша помощь.
Ищется готовая веб-форма, типа "менеджер списков".
Вбиваешь что-нибудь в список / удаляешь что-нибудь из списка, потом всё это сохраняешь в базу.

Мог бы конечно и сам создать, но думаю где-то в сети уже есть готовое решение.

Кому-нибудь на глаза попадалось ?

На картинке примитивная схема.
>> No.42454 Reply
>>42453
Можно запилить быстро на vue.js. В таком виде тебе форма готовая вряд ли попадётся. Это и не тянет ни на какое решение и недостаточно просто, чтобы был jq-плагин, нет никакого потенциала к повторному использованию.
>> No.42455 Reply
>>42454
Вот, пара минут на vue.js и несколько строк.
http://jsfiddle.net/wy2qf6yx/126/
>> No.42681 Reply
Хочу автонономное хранилище данных для локальной одностраничной мордочки на javascript.
Дает ли кто такое нахаляву? Нашел некий firebase, вроде что-то такое, но пока неясно, годное ли.
>> No.42685 Reply
>>42681
Что такое автономное хранилище данных?
>> No.42686 Reply
>>42685
Грубо говоря, база данных с работой через http запросы.
Т.е. чтобы не сохранять в браузере и не нужен был бэкэнд.
>> No.42716 Reply
>>42681
Сейчас модна такая тема как backend as a service. Большинство из них дают разработческого уровня аккаунты с терпимыми лимитами для небольшой приложухи навечно. Я пользуюсь firebase: простой апи, тот самый вечный халявный аккаунт, миллион оберток для всевозможных фреймворков, подводных камней - не обнаружено.
А вообще, почитай вот этот книжкосайт о таких приложехах https://unhosted.org/ Он помимо общего хранилища предлагает организовывать хранение персональных данных, согласно концепции remote storage: типа каждый пользователь сам заботится о предоставлении бекенда и хранит данные, где сам захочет.
>> No.42717 Reply
>> No.42817 Reply
File: UcfQMQPNz50.jpg
Jpg, 69.77 KB, 540×404 - Click the image to expand
edit Find source with google Find source with iqdb
UcfQMQPNz50.jpg
Че то я читаю javascript.ru и нихуя не врубаюсь в функциональную модель javascript. Читаю, как бы все понятно, задачку решить - хуй. Я совсем тупой? Посоветуйте что нибудь что бы понять функции, объекты, познать дзен замыканий . Если честно язык поражает, совсем не похож Python, Java and C. Можно писать так, что в кошмаре не присниться.
>> No.42818 Reply
>>42817
Покажи, что за задачи такие?
>> No.42819 Reply
>>42817
Замыкания там такие же как в других языках, а вот объекты, да, полный трындец. Там вообще нет классов, а есть конструкторы. Большинство веб-кодеров "просто сайтов" не утруждают себя подробным изучением объектов в js. Для них это просто хеши, а конструкторами и прототипами они не пользуются. Кроме того this в функциях очень часто указывают конкретно с помощью функции proxy из jquery или другой библиотеки.
>> No.42826 Reply
>>42686
https://parse.com/plans — это попробуй.
>> No.42848 Reply
File: 14306748350511.jpg
Jpg, 35.94 KB, 564×422 - Click the image to expand
edit Find source with google Find source with iqdb
14306748350511.jpg
>>42818
Вот https://learn.javascript.ru/task/sum-many-brackets например. Я блять тут в решение вообще нихуя не понял. Ретурн функции - сама функция. Что курить что бы понять эти кун-фу функций, они очень нужны и есть ли учебники лучше чем learn.javascript? В интернете очень хвалят этот ресурс. Или мне просто пора в биореактор?
>> No.42850 Reply
>>42848
Задача скорее на знание специфики js, чем замыканий. Функция после обработки держит ссылку на предыдущий результат и отдает новую функцию которая суммирует предыдущий результат с новым аргументом. Вся хитрость в том, что отдаваемая функция имеет метод числового типа (.valueOf), что позволяет сравнивать ее (функцию) с другим числом. Если эту понял https://learn.javascript.ru/task/closure-sum, то не заморачиайся.
>> No.42851 Reply
>>42817
Попробуй книги по Руби:
«Programming Ruby» (D. Thomas, C. Fowler, A. Hunt)
«Eloquent Ruby» (R. Olsen)

Не то, чтобы я был его фонатом, я не пишу на нём и вакансий почти не вижу, но замыкания в книгах по нему есть.
>> No.42852 Reply
File: Tetris.png
Png, 18.59 KB, 970×672 - Click the image to expand
edit Find source with google Find source with iqdb
Tetris.png
>>42848
> Ретурн функции - сама функция. Что курить что бы понять эти кун-фу функций
Напиши «Тетрис» или «The Game of Life».
>> No.42856 Reply
File: RYv5RQnPlAQ.jpg
Jpg, 59.31 KB, 604×409 - Click the image to expand
edit Find source with google Find source with iqdb
RYv5RQnPlAQ.jpg
>>42850
https://learn.javascript.ru/task/closure-sum ну это я понял.
>>42851
Ну уж, нетушки. Я таким образом НЕДОУЧИЛ уже Python and C. Теперь еще недоучить javascript adn ruby, это еще время.
>> No.42857 Reply
>>42856
В питоне есть замыкания и ты уже должен был понять весь их дзен.
>> No.42858 Reply
File: V-Dolnik.png
Png, 21.49 KB, 165×232
edit Find source with google Find source with iqdb
V-Dolnik.png
File: 1430742531519.png
Png, 0.81 KB, 300×20
edit Find source with google Find source with iqdb
1430742531519.png

>>42856
> Теперь еще недоучить javascript adn ruby, это еще время.
Икарочи тут ученик ПОНЕЛ в чём сцуть провфесии погромиста и обрёл просветление.
Так мы и учимся всю жизнь. Когда не запиваем.
>> No.42860 Reply
File: 14307111575240.jpg
Jpg, 37.34 KB, 590×393
edit Find source with google Find source with iqdb
14307111575240.jpg
File: 14307111575241.jpg
Jpg, 54.25 KB, 500×504
edit Find source with google Find source with iqdb
14307111575241.jpg

>>42857
Замыкание уже понял. Вот эта магия с функциями очень напрягает, там () - вызов функции, там () - блок кода.
>>42858
Больше всего "харят" фрейворки, на входе сыпешь опилки, на выходе получаешь золотые монеты с профилем Пия 4... Все время кажется что не доучил, не дорозабрался, ковырят смотреть что в середине - тоже время уходит. Ну ладно поплакался, и будет.
>> No.42861 Reply
>>42858
Кстати да, по сути получается, что чтобы работать надо именно что недоучить сто пятьсот технологий. Мало кто знает джаваскрипт по-настоящему хорошо, особенно эти объекты.
>>42860
> на выходе получаешь золотые монеты с профилем Пия 4
О, а я тебя помню, ты уже создавал тред этак год назад. Уже можно было расковырять всю джангу за такое время. Да и не настолько она сложные вещи делает, чтобы так тупить. Что там такого особенного?
> там () - вызов функции, там () - блок кода
() нигде не блок кода, это вызов функции и передача ей списка параметров, либо часть описания новой функции, её списка параметров. Просто функция может быть параметром, вот и всё. Код всё равно везде в {}.
>> No.42862 Reply
File: 1400165235690sjb3n.jpg
Jpg, 13.17 KB, 299×287 - Click the image to expand
edit Find source with google Find source with iqdb
1400165235690sjb3n.jpg
>>42861
> О, а я тебя помню, ты уже создавал тред этак год назад.
Бля, спалился. Я django даже и не начинал ковырять. Установил django-shop на свой openshift. Надо набить этот виртуальный магазин всякой лабудой для рюземе, но для меня это самое тяжелое, дизайн, картиночки... Это самая видная и самая показательная часть роботы. Протрезвею и займусь этим. Буду делать просто количество, похуй на качество. Лучше сделать 150 хуевых горшков, чем ни одного. Если честно , аж покраснел от стыда, за год практически нихуя не сделано, а анон все помнит и нихуя не забывает....
>> No.42863 Reply
>>42862
Попробуй бутстрап.
Я тоже вообще не могу в ололо-дизайны, но на нем получается сделать аккуратные не вырвиглазные мордочки, хотя тоже приходится гуглить и методом тыка что-то там колхозить.
мимо
>> No.42864 Reply
>>42862
> Надо набить этот виртуальный магазин всякой лабудой для рюземе, но для меня это самое тяжелое, дизайн, картиночки... Это самая видная и самая показательная часть роботы.
Для резюме кодера это не нужно, набиваешь рандомом. Разве что, если резюме для фриланса, да и то, готовый шаблон или просто бутстрап и рандом в картинках товаров. Или я чего-то не понял.
>> No.42877 Reply
File: 8OYjg7wdtSw.jpg
Jpg, 63.64 KB, 604×521 - Click the image to expand
edit Find source with google Find source with iqdb
8OYjg7wdtSw.jpg
>>42864
Фриланс. Скопить денег, что бы ехать в ближайший МИЛЛИОНИК, не получается.
>> No.42878 Reply
>>42877
Просто бери готовое. Бери бутстрап. Он так сделан, что ты можешь сделать всё оригинальным, подкрутив пару настроек в нём. Все так делают, когда нет дизайнерских макетов. Фотографии товаров - из гугл-картинок, естественно.
Кроме того, учти, что есть рабочие места удалёнкой. Иногда берут на постоянку или почти постоянку удалёнщиков кодеров или верстальщиков. Так что шарься и по биржам, и по вакансиям. Поспрашивай в институтиках тоже. У преподов и у студентов/аспирантов. Не вздумай кому-нибудь говорить, что кодер и ещё вот рисуешь, позиционируй себя по одному направлению как можно чётче.
>> No.42881 Reply
File: Resume.png
Png, 120.34 KB, 1000×1853
edit Find source with google Find source with iqdb
Resume.png
File: 1431131822393.png
Png, 0.84 KB, 300×20
edit Find source with google Find source with iqdb
1431131822393.png

>>42862
> Надо набить этот виртуальный магазин всякой лабудой для резюме
>> No.42898 Reply
>>41387
писал всего два парсера, первый на регэкспах, второй на simplehtmldom. Оба работают, но считаю регэкспы для этого излишни.
>> No.42899 Reply
>>42898
Что значит "работают"? Парсил ли ты ими реальные данные с реальных сайтов? Получилось ли собрать нормальную не сыплющуюся номенклатуру?
>> No.42917 Reply
>>42881
Это иностранные требования к резюме, поди ещё и США какое-нибудь? Могут не проканать в России, надо ориентироваться на реалии рынка.
>> No.42920 Reply
>>42917
Здесь нет требований, это просто прикол. Не можешь прочесть небось?
>> No.43056 Reply
Я нуб и застрял.

[CODE]var bt = document.getElementsByClassName('button');

for (i = 0; i < bt.length; i++)
{

bt.item(i).onkeypress = function ()
{
alert(i);
}

}[/CODE]

Alert всегда будет показывать последнее число.
Что можно сделать ?
>> No.43057 Reply
>>43056
i после выполнения цикла сидит с последним вычисленным значением. Функция эту i берет извне.
var bts = document.getElementsByClassName('button');
[].forEach.call(bts, function (bt, i) { // отдельная область видимости на каждую итерацию
    bt.onkeypress = function () {alert(i);}
});
>> No.43059 Reply
>>43057
P.S.
[].forEach.call(bts, fn) это bts.forEach(fn). Лист элементов не поддерживает этот метод стандартного массива.
>> No.43061 Reply
>>43056
Переменная i передана по ссылке. Надо или втыкать где-то функцию между созданием замыкания и итерацией для получения новой области видимости или использовать .bind.
http://stackoverflow.com/questions/750486/javascript-closure-inside-lo[...]ample
>> No.43126 Reply
>> No.43131 Reply
File: 30269910.jpg
Jpg, 149.26 KB, 640×480
edit Find source with google Find source with iqdb
30269910.jpg
File: berserk__rage_in_...
Jpg, 112.14 KB, 1024×552
edit Find source with google Find source with iqdb
berserk__rage_in_the_flames_of_hell_by_dantej76-d6.jpg

Как же меня уже заебали эти ёбаные джейквери-плагины. Вечно то сначала юзают их, а потом жалуются, что не могут заставить их работать по-другому, то в них эти ёбаные баги. А написать самому времени нет.

Вах, ваша карусель не работает на айпаде мини. На айфоне работает, на айпаде рабаотет, а на айпаде мини - нет!

Да ещё взяли моду на эти менеджеры пакетов, с понтом, они потом будут обновлять это говно. И теперь нельзя править их код напрямую. Были бы это настоящие программы, то можно было бы хоть классики попереопределять. А тут пиздец, вообще ничего нельзя сделать.

Ещё хуже, если таки, они действительно обновляют их. Обновил и всё развалилось. А у них менеджер пакетов, блядь, понимаешь. Крутые такие, поставили версию в bower.json со звёздочкой "14.88.*", с понтом, версию закрепили. И что. А на репе автор плагина версии всё равно не предусмотрел(ну ещё бы!). Всё что менеджер пакетов делает - качает с гитхаба и складывает в папку, заебись, помощь в разработке.

Главное, к бэкенду на пхп относятся по-человечески, а джаваскрипты вечно пишут, блядь, хуем просто. "В джаваскрипте не нужно то", "В джаваскрипте не нужно это". А потом когда говорят, что этим трудно пользоваться и UX нету нихуя почему-то удивляшки ебаные. "Насяльника, я вот, ей богу, всё правильно в коде писал, да это всё просто плагин, я тут ни при чём, ну нельзя туда нажимать".

Что за тупая работа.
>> No.44639 Reply
Доброкодер, расскажи (а лучше покажи) как вот такую штуку делать:
Obj.text = 'hello world' //--> Obj.node.textContent ='hello world'

Obj.text  //--> 'hello world'
то есть меняешь вроде как значение в объекте, а вместе с ним меняются и параметры каких то элементов.

Как то же из коробки у всяких элементов это есть. В инспекторе написано
Object
   prototype
      value
         set fn()
         get fn()
Но как это писать?

function Timer() {
   return document.createElement('span')
}

Timer.prototype.time = {
   set: function (v) {
     var d = new Date(v * 1000)
     this.time = v
     this.textContent = d.toISOString().match(/\d+:\d+:\d+/)[0]
  },
  get: function () {
     return this.time
  }
}

var t_t = new Timer()
    t_t.time = 70
document.body.appendChild(t_t)
console.log(t_t.time)
Вот так вот не работает
>> No.44640 Reply
>> No.44641 Reply
>>44639
http://pastebin.com/sFWnbbj6
Алсо, не знаю делаешь ли ты это нарочно, но из конструктора обычно не возвращают. Твой new Timer() станет html элементом span и не будет являться инстансом Timer.
>> No.44642 Reply
>>44641
> не знаю делаешь ли ты это нарочно, но из конструктора обычно не возвращают.
А как вот тогда делают всякие
new Date()  //-- вернулась объект|строка Date "01.01.01 00:00:01 GMT"
new Audio()  //-- вернулся элемент <audio>
?
>> No.44643 Reply
>>44641
Хотя так то defineProperty уже делает нужное, то есть позволяет задавать действия при изменениеии атрибута элемента.
В общем спасибо.
>> No.44644 Reply
>>44642
Под возвратом имел в виду return expr в конце конструктора. Объект неявно создается.
>> No.44645 Reply
>>44644
А вот такая вот фигня еще:
https://jsfiddle.net/jpstnwc3/

вот я time хитровыебанным атрибутом сделал, а где само значение хранить то?

на MDN предлагают во внешней переменной, но это же пиздос.
>> No.44647 Reply
>>44646
Блин, ну так и сделал, ну ладно пусть тогда так и будет если по другому никак.
>> No.44648 Reply
>>44645
Варианта два: хранить "хитровыебанным" атрибутом твоего объекта (красивее всего ._time), либо внутри замыкания в конструкторе. Оба варианта нормальные, анон (и оба в пастбине выше).

Алсо, я не то чтобы эксперт в подобном, но обычно напрямую с элементом не работают, а хранят ссылку и связанные с ним методы/данные в своем объекте (как jquery например).
>> No.44649 Reply
>>44648
> я не то чтобы эксперт в подобном, но обычно напрямую с элементом не работают, а хранят ссылку и связанные с ним методы/данные в своем объекте
Возможно есть грабли о которых я не подозреваю и которые однажды разобьют мне лоб. Да.
Но это все когданибудьпотом, а сейчас ...
>> No.44650 Reply
>>44645>>44648
p.s. твой глобальный i ненужен, вполне можно делать timer.time += 1.
p.p.s инкремент внутри чего-то сложнее чем просто i++/i-- на строке это некрасиво.
>> No.44655 Reply
File: 1429188103_kin-dza-dza-4.jpg
Jpg, 45.14 KB, 900×600 - Click the image to expand
edit Find source with google Find source with iqdb
1429188103_kin-dza-dza-4.jpg
>>44642
Посмотрите, до чего довела планету ваша динамическая типизация и неявное приведение типов!
>> No.44656 Reply
>>44655
И та и другая возвращает обычный объект, остальное браузер для наглядности показывает.
>> No.44657 Reply
>>44656
Я к тому, что кодеры некоторые едва понимают, что происходит.
>> No.44662 Reply
>>44656
Строка в JS тоже как бы не простая, она и как Array работает и как строка и как объект,
И таки если сделать
var d = new Date(0)

'<span>' + d + '</span>' //-->  "<span>Thu Jan 01 1970 00:00:00 GMT+0000 (...)</span>"
Тоесть возвращается строка, либо объект который ведет себя как строка, хотя наверно разницы нет.
И вот вопрос то весь как вот их делать.
>> No.44663 Reply
>>44662
Все верно, просто объекты примитивы часто получают special treatment.
> как вот их делать
Определить свой toString метод.
>> No.44666 Reply
File: YBDm8cF.gif
Gif, 5662.81 KB, 340×340 - Click the image to expand
edit Find source with google Find source with iqdb
YBDm8cF.gif
>>44662
> Строка в JS тоже как бы не простая, она и как Array работает и как строка и как объект
Всё в js является объектом, даже числа. Правда, там какие-то трудности могут быть, если начать использовать примитивные типы, как если бы они были объектами, лучше не извращаться лишний раз.
А как массив она не работает, это чушь. Просто у неё синтаксис в некоторых местах немного сделан схожим, только то. Не будет она тебе работать "как массив".
> как бы не простая
Обычная она, блядь.
> Тоесть возвращается строка, либо объект который ведет себя как строка, хотя наверно разницы нет.
Возвращается объект, но как только ты начинаешь делать с ним что-то, что делают со строкой, тут же вызывается метод toString(). Это и называется неявное приведение типов. Типы приводятся, когда ты начинаешь использовать их там, где ожидают другой. Эта херня очень опасная и создаёт кучу багов и прочего, поэтому нормальные языки от неё избавляются, но любителей экономить буквы кода всё равно море, и всё это продолжает жить.
>>44663
> special treatment
Теперь это так называется?
>> No.44667 Reply
>>44666
> Правда, там какие-то трудности могут быть, если начать использовать примитивные типы, как если бы они были объектами, лучше не извращаться лишний раз.
Это если создавать строку конструктором, через new String(). Отличия в том, что typeof вернет не String, а Object, а eval вместо выполнения вернет саму строку, поэтому таким объявлением никто не пользуется, а объявление примитивных типов через объекты планируют в скором времени выпилить как явление.
>> No.44668 Reply
>>44666
> А как массив она не работает, это чушь. Просто у неё синтаксис в некоторых местах немного сделан схожим, только то. Не будет она тебе работать "как массив".
"test"[1]  //--> e

"test".indexOf("s") //--> 2

"test".length //--> 4
ну итд

да и даже при манипуляции с substring или new String() можно увидеть в выхлоп что то типа "t" "e" "s" "t" так что это все таки больше массив
>> No.44669 Reply
>>44666
> Теперь это так называется?
Что тебя не устроило?
>> No.44670 Reply
>>44668
Это не может быть больше массив или меньше, это или массив, или нет. Array не является прототипом String. Метод map, например, определён в Array, но не в String. Засунуть строку в стороннюю функцию, ожидающую на вход массив, ты не можешь, будучи уверенным, что будет работать, ты не можешь.
>>44669
Смешное словосочетание, не несущее никакого смысла. Скорее всего кто-то читал учебник на английском и решил, что это термин и можно не переводить. Наверное, не смог сам перевести "treatment".
>> No.44671 Reply
>>44670
> Array не является прототипом String
Если ты о строгих типах то их в JS вовсе нет. Массив это такая баночка с чипсами Pringles из которой, что бы достать последнюю нужно поочередно вынуть первую, вторую, третью ... сотую чипсину. Если строка воспринимается языком как некий цельный кусок то пожалуй и не является, а если как упорядоченный набор символов (как в JS) то что это если не массив?
>> No.44673 Reply
File: oeEoOzH.gif
Gif, 132.97 KB, 311×366 - Click the image to expand
edit Find source with google Find source with iqdb
oeEoOzH.gif
>>40541
> javascript
> яваскрипт
>> No.44674 Reply
>>44673
Ne pokhui li, comrade?
>> No.44675 Reply
>>44674
No, absolutely ne pokhui.

%% Если Javascript - Яваскрипт, то Objective-C - Объектив-Си, John - Иван %%
>> No.44676 Reply
>>44671
> Если ты о строгих типах то их в JS вовсе нет
Я о прототипах, очевидно же. Местный аналог наследования. И я не знаю такого понятия как строгие типы. Массив - это массив. Точка.
>> No.44680 Reply
>>44673
ecmascript
>> No.44681 Reply
>>44673
Жабоссгирт.
>> No.44682 Reply
>>44681
Говно.
>> No.44700 Reply
Кстати, какая есть актуальная книга на 2016, чтобы по хардкору за жабаскрипт, без разжевывания для полных нулей, как сейчас принято.
>> No.44701 Reply
>>44700
Книга со слоном.
>> No.44702 Reply
>>44701
Што? Была только с носорогом, но она старая как говно носорога.
>> No.44703 Reply
>>44702
А точно, носорог! Я её лет пять назад читал, вроде была популярна.
>> No.44705 Reply
>>44700
Я читал по-немножку вот отсюда:
https://docs.webplatform.org/wiki/javascript
https://developer.mozilla.org/ru/docs/Web/JavaScript
http://chimera.labs.oreilly.com/books/1234000000262
Книжка Эрика Элеота Programming JavaScript Applications, мне кажется, чуть ли не единственная в своём роде. Я других не видел, хотя искал. Там рассказываются специфичные для джаваскрипта техники и фичи, которые нигде никто не рассказывает. С обоснованиями, мотивацией к их использованию и т.п.
Азы самые есть на webplatform.org, крутой ресурс, амбициозный, но не всё ещё написали, что хотели, долго тянется уже. Там же про технику "ненавязчивый джаваскрипт" поясняется, правда немного с фанатизмом.
На Мозиле вроде полная дока есть, про прототипы там объясняется неплохо.

Все хвалят (включая самого Элеота в предисловии) Фленегана, но там вроде одни азы по идее, при этом она длинная.
>> No.44743 Reply
Вопрос о выборе инструмента.
Есть очень простая задача. Фронтенд - показать юзеру инпут, на каждое его изменение брать содержимое, тыкать его запросом в бекенд, получать от бекенда ответ и рендерить его на странице(желательно всё это без переходов). Сижу и думаю, какой такой фреймворк можно подобрать, чтобы MVC не натягивалось на голову(которое здесь не нужно). Попробовал эмбер - толсто и без лишнего геморроя не сделать то, что хочется, приходится ворочать месивом из роутов/моделей/всего_остального, когда это тут совсем не впёрлось. На голой ноде что ли писать?
>> No.44847 Reply
>>44743
React + Meteor
>> No.44966 Reply
>>44964
Потому что у link href, а не src?
>> No.44967 Reply
>>44966
Ошибка моя была, на самом деле, в бездумном копировании. Здесь вообще не нужно дёргать реплейс, можно просто назначить значения: я же полностью их изменяю, а не меняю что-то на что-то.
Но всё равно спасибо. Ты няша.
>> No.44968 Reply
>>44967
Да я заметил, что он слегка норкоманский, но уже не стал расписывать.
>> No.44970 Reply
Не знаю, где ещё спросить, спрошу здесь.
Я часто видел на сайтах такое, что иконки перекрашиваются со сменой юзерстиля. Но при этом при попытке их сохранить это был ч/б .svg-файлик.
Мб кто знает, как это реализовано? Я, увы, не могу найти сейчас с наскока.
>> No.44971 Reply
>>44970
CSS: svg {fill: green;}
>> No.44972 Reply
>>44970
svg - это почти как html. Свойства тегов меняются через js и css как обычно.
>> No.44999 Reply
File: 104928024.jpg
Jpg, 195.14 KB, 1600×1200 - Click the image to expand
edit Find source with google Find source with iqdb
104928024.jpg
>>40541
var changeImg = (function(ele) {
ele = document.querySelector(ele);
ele.addEventListener('click', function(element, source) {
  if (element.target.className == 'item-nav-img')
    source = element.target.getAttribute('src');
  var setSource = function(attr, selector) {
    document.querySelector(selector).setAttribute(attr, source);
  };
  setSource('href', '.image-popup-vertical-fit');
  setSource('src', '.image-popup-vertical-fit img');
});
   })('.gal-slider-nav');

Норм, котаны?
>> No.45000 Reply
>>44999
Че оно делает?
>> No.45002 Reply
>>45000
Есть главная картинка и много других картинок. Кликаешь на другие картинки, их изображение передаётся на главную. Тут смысл не в том, что это делает, а как написано :3
>> No.45003 Reply
>>45002
Самовызывающаяся функция. Кажется, здесь применяется парадигма функционального программирования.
>> No.45008 Reply
>>45002
Написано так, что с ходу не поймешь, но вроде ничего.
  • Сокращение от element - elem или el.
  • Основная функция принимает на вход селектор, а у тебя имя параметра ele.
  • В чем прикол переменной changeImg, функция же ничего не отдает?
>>45003
Интуиция вас не подвела.
>> No.45010 Reply
>>44999
P.S. Параметр у функции для addEventListener только один - event (или просто e), а у тебя (element, source).
P.P.S Почему после if'а нет else'а с реторном, сурс же не найден будет?
>> No.45011 Reply
>>45010
Спасибо!
>> No.45012 Reply
>>45008
> В чем прикол переменной changeImg, функция же ничего не отдает?
Обозвать функцию и вроде как кешируется же
>> No.45014 Reply
>>45011
На здоровье.
>>45012
Ты определяешь анонимную функцию function(ele){ и тут же ее вызываешь )('.gal-slider-nav'). changeImg примет не ее саму, а то, что она выбросила, в данном случае undefined.
var a = (function(){ return 5 })() // a - 5
var a = (function(){})() // a - undefined
var a = function(){} // a - function (нет имени)
var a = function a(){} // a - function (есть имя - a)
function a(){} // a - function (есть имя - a)

(function a(){})()
На последней строке определяется анонимная функция c именем "a" и тут же вызывается, в таком варианте "a" служит чисто для красоты и дебага - в дальнейшем ты к этой функции не по "a", не вообще никак не доступишься.

То, что, я полагаю, ты хотел - невозможно.
>> No.45015 Reply
>>45014
Дополнение. "a" в последнем примере доступна изнутри.
(function a(){console.log(a);})() // -> function a
Там с этим все мутно - баги, различия в имплементациях.
>> No.45016 Reply
File: lolicon-520x245.jpg
Jpg, 29.42 KB, 520×245 - Click the image to expand
edit Find source with google Find source with iqdb
lolicon-520x245.jpg
>>45014
>>45015
Спасибо, прокачал меня.
>> No.45017 Reply
File: cvety_devochka_zheltyy_fon_ulybka_anime_1280x1024.jpg
Jpg, 208.55 KB, 1280×1024 - Click the image to expand
edit Find source with google Find source with iqdb
cvety_devochka_zheltyy_fon_ulybka_anime_1280x1024.jpg
>>45016
Так лучше?

(function(ele) {
ele = document.querySelector(ele);
if (ele == null) return;
ele.addEventListener('click', function(event) {
  event = event || window.event;
  var element = event.target || event.srcElement;
  if (element.className == 'item-nav-img') {
    var source = element.getAttribute('src');
    var setSource = function(attr, selector) {
      document.querySelector(selector).setAttribute(attr, source);
    };
    setSource('href', '.image-popup-vertical-fit');
    setSource('src', '.image-popup-vertical-fit img');
  } else {
    return;
  }
});
   })('.gal-slider-nav');
>> No.45019 Reply
File: Screenshot_2016-03-16_16-14-06.png
Png, 76.68 KB, 741×526 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_2016-03-16_16-14-06.png
>>45017
Да.
>> No.45020 Reply
>>45019
> // можно просто if (ele)
Вычеркнуть это.
>> No.45021 Reply
>>45019
Про var согласен.
Об IE8 совсем не задумываюсь.
else блок на всякий случай.
Зачем? Просто, потому что могу и мне кажется это прикольным.
>> No.45022 Reply
>>45019
Кстати, не пробовал на emacs перейти? Ты под виндой работаешь?
>> No.45023 Reply
>>45022
Линэкс/СублаймТекст3. Давно на нем, устраивает, перебираться не планирую.
>> No.45024 Reply
>>45023
emacs норм, кстати
>> No.45025 Reply
>>45023
Какой дистрибутив используешь?
>> No.45026 Reply
>>45024
Верю, попробую как-нибудь.
>>45025
Арч.
>> No.45027 Reply
>>45019
За названия переменных типа ele отрывают руки. Буквы бесплатные и неча их экономить. Если будешь считать, что малая длина программы - это достоинство, то будет всегда говно. Хороший код требует толка и расстановки.
>> No.45028 Reply
File: anime-girl-archlinux.png
Png, 768.23 KB, 1920×1200 - Click the image to expand
edit Find source with google Find source with iqdb
anime-girl-archlinux.png
>>45027
> будет всегда говно
Так и записал...
>> No.45030 Reply
>>45027
Для мамкиных экономов придуманы аглифаеры и минифаеры например.
мимополз
>> No.45031 Reply
>>45026
Как wifi BCM43142 поднять? Дрова поставил. Пытаюсь с wifi-menu точку выбрать, пишет ошибку.

failed because the control process exited with error code.
>> No.45032 Reply
>>45031
Ты меня как эксперта по арчу спрашиваешь? Я его 4 года назад ставил, с тех пор только через гуевый NetworkManager с сетью возился. Там он наверное написал что-нибудь вроде "see 'journalctl -blah -blah' for details", смотри в эту сторону.
>> No.45033 Reply
>>45032
Да смотрел это всё... Всё по инструкции делал. Нет результата. Всё равно ошибка.
>> No.45034 Reply
>>45033
Часто советуют в случае проблем ставить connman, и пробовать через него.
>> No.45035 Reply
>>45034
Сейчас попробую
>> No.45036 Reply
>>45034
> sudo connmanctl scan wifi
Error /net/connman/technology/wifi: No carrier
>> No.45037 Reply
>>45035
connmanctl technologies
/net/connman/technology/ethernet
   Name = Wired
   Type = ethernet
   Powered = True
   Connected = True
   Tethering = False
/net/connman/technology/bluetooth
   Name = Bluetooth
   Type = bluetooth
   Powered = False
   Connected = False
   Tethering = False
/net/connman/technology/wifi
   Name = WiFi
   Type = wifi
   Powered = False
   Connected = False
   Tethering = False
>> No.45038 Reply
>>45034
Я чувствую боль и стресс.
>> No.45039 Reply
File: lspci-k.png
Png, 60.88 KB, 894×313
edit Find source with google Find source with iqdb
lspci-k.png
File: ip-link.png
Png, 47.82 KB, 894×313
edit Find source with google Find source with iqdb
ip-link.png

>>45038
Мало чем могу помочь.
Проверь lspci -k. Проверь ip link show, если покажет DOWN делай ip link set wlan0(подставить свое) up.
Можешь еще в техподдержку или неофициальный интересный(тм) треды обратиться, но там тебе скорее всего скажут ставить дебиан стейбл.
>> No.45040 Reply
>>45039
state UNKNOWN
Да у меня уже много дистров было, хочу archlinux поковырять.
>> No.45041 Reply
>>45039
А в тп куда обращаться? На английском писать?
>> No.45042 Reply
>>45041
Не, имел в виду здешний техподдержки тред.
Можешь сходить еще на русский арч форум или английский, если знаешь его.
Либо поставить перенастроенный арч с инсталятором ( https://wiki.archlinux.org/index.php/Arch_based_distributions_%28active%29 ).
>> No.45049 Reply
>>45042
Ну собственно я разобрался, спасибо за ответы.
>> No.45052 Reply
>>45049
Не за что. че было та?
>> No.45053 Reply
>>45052
Да там я тупил... Вот я составил, что нужно делать, чтобы взлетело.

Archlinux BCM43142. Запустить wi-fi.

Устанавливаем драйвер:
yaourt -S broadcom-wl
Устанавливаем netctl и dialog (для wifi-menu):
sudo pacman -S netctl
sudo pacman -S dialog
Ищем точку доступа и создаём шаблон (здесь вы выберете точку, введёте от неё пароль, укажете наименование шаблона):
sudo wifi-menu -o
Узнаём интерфейс (он будет вида wlp7s0):
ip link
Опускаем наш интерфейс:
sudo ip link set ваш_интерфейс down
Запускаем наш шаблон и добавляем в автозагрузку (посмотреть шаблон, созданный wifi-menu -o можно в /etc/netctl/):
sudo netctl start ваш_шаблон
sudo netctl enable ваш_шаблон
>> No.45054 Reply
>>45053
Даже можно: ip link | grep "wlp"
>> No.45055 Reply
>>45054>>45054
> будет вида wlp7s0
> grep "wlp"
Не факт, у меня wlan0. https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkIn[...]ames/
>> No.45056 Reply
>>45055
Ну тогда ip link | grep "wl"
>> No.45057 Reply
>>45055
У тебя просто на вафлю сразу драйвера нормальные установились...
>> No.45098 Reply
>>40541
Вопрос скорее по работе браузеров с ресурсами, чем по джаваскрипту. Как я понимаю, если несколько раз загрузить одно и то же изображение (с одинаковым атрибутом href), то все, кроме первого загрузятся моментально?

Теперь такая ситуация: есть бегущая лента изображений. Новые изображения подгружаются через аякс, старые - удаляются. Как загрузится новое изображение, если
а) такое было на странице, но удалилось
б) такое есть на странице в каком-нибудь объекте со свойством display:none; ?

Будет ли разница и во всех ли браузерах?
>> No.45099 Reply
>>45098
В хромовской дебаг-панели можно отследить во вкладке network загрузку. В других браузерах тоже бывают такие панели. Скорее всего, везде должно только один раз браться и кешироваться надолго по адресу картинки. Но может зависеть от настроек сервера - ставит ли он хедер "не кешировать" или как-то так. Подробнее надо или самому проверять или рыть доки самих браузеров, скорее всего.

Не знаю, ответит ли кто-нибудь более точно здесь.
>> No.45100 Reply
>>45099
пожалуй проще и правда изучить этот вопрос. Спасибо тебе, добрый анон.
>> No.45107 Reply
У меня тут проблема весьма неожиданного характера. Есть объект, допустим:
var obj1 = { name: 'value' }
Мне необходимо, получить значение поля name и присвоить его в качестве ключа другого объекта:
var obj2 = { obj1.name: 'something' }
Но интерпретатор в упор не хочет заменять obj1.name на нужную строку и выдает ошибку. Никто не знает, в чем прикол такой странной работы языка? Есть идеи, как заменить этот код с минимальными изменениями?
>> No.45108 Reply
>>45107
var someMetadata = { property : "myProperty" };
var concreteObject = {};
concreteObject[someMetadata.property] = value;
>> No.45114 Reply
File: brendan-eich-mozilla-firefox-square.jpg
Jpg, 255.23 KB, 870×870 - Click the image to expand
edit Find source with google Find source with iqdb
brendan-eich-mozilla-firefox-square.jpg
>>45107
слева от : можно писать в js только строку в кавычках или без, никаких выражений. Возможность ставить кавычки в левой части наводят на мысль, что это выражение, но это не выражение. Js - это как пых, только от ребят из Моззила, не надо удивляться. Просто они не подумали.
>> No.45115 Reply
>>45114
В es6, к слову, есть вычисляемые имена полей.
>> No.45116 Reply
>>45114
Половина твоего поста - правда.
>> No.45117 Reply
>>45116
Половина твоего поста - правда.
>> No.45120 Reply
>>45117
Половина твоего поста - неправда.
>> No.45121 Reply
>>45120
true === true;
Весь мой пост - исключительная 100%-ная правда.
>> No.45124 Reply
Когда я стану старым, я открою секту яваскрипт-старообрядцев на ютубе, где буду проповедовать написание кода в 1 файле, создание SPA-приложений на базе технологии HTA и использование addEventListener.

Но до этой поры, к сожалению, еще очень далеко и придется терпеть нашествие пакетных менеджеров и коллег, которые их используют наперекосяк.
>> No.45128 Reply
>>45121
> true === true;
Как громоздко...
true и всё.
>> No.45135 Reply
>>45128
Половина твоего поста - правда.
>> No.45136 Reply
>>45124
Какое самое большое количество кода ты можешь написать в одном файле? 100 000 строк сделаешь? Если нет, то зачем вообще открывать редактор? Все программы короче 100 000 строк уже написаны.
>> No.45137 Reply
>>45136
Большое количество строк - это не то, к чему надо стремиться и чем гордиться.

Так что ты будешь моим еретиком. Я тебя буду троллировать ссылками на свои видосы, а ты будешь приходить и противно гундеть в комментах.
>> No.45138 Reply
>>45136
Забыл спросить, как тебе мой план?
>> No.45140 Reply
Меня уже довольно долгое время мучает один вопрос. Вот делаю я свою игрушку на джс. У меня в ней есть массив объектов, очень больших и громоздких. Но по ходу игры различные объекты добавляются еще в большую кучу других словарей и массивов. Так вот вопрос: добавляются ли в другие массивы только указатели на существующие объекты, или же каждый раз копируется все содержимое объекта, не щадя память комплюктера? Просто думаю, нормально ли так делать, но других выходов-то и нет.
>> No.45141 Reply
>>45140
Нет, не копируются. Если ты самостоятельно deepcopy или чего еще изощренное не делаешь. Хотя твои библиотеки вполне могут где-нибудь зачем-нибудь что-нибудь такое-сякое и делать.
>> No.45143 Reply
>>45141
Спасибо, теперь я все понял. Библиотеки не использую никакие, все сам.
>> No.45144 Reply
Ситуация: юзерскрипт (не публичный) делает Array.prototype.__оченьУникальноеИмяТут = function () {...}, в следствии чего на некоторых сайтах начинаются глюки, в консоли ошибки о несуществовании различных методов у строк/массивов/чего-то еще. Как это вообще может что-то поломать? У меня никаких идей.
>> No.45145 Reply
>>45144
Текст ошибок бы показал, да с примерами. Первая мысль - на этих некоторых сайтах выполняется не совсем правильно написанный for in.
>> No.45146 Reply
>>45145
Ты прав, там простой фор ин по массиву. Все стало ясно.
Array.prototype._xx = 'hello';
Object.getOwnPropertyDescriptor(Array.prototype, '_xx')
-> { value: "hello", writable: true, enumerable: true, configurable: true }
Object.getOwnPropertyDescriptor(Array.prototype, 'slice')
-> { value: slice(), writable: true, enumerable: false, configurable: true }
>> No.45147 Reply
File: 16235-fu-kak-nekulturno-s-frekenbok.jpg
Jpg, 48.05 KB, 480×360 - Click the image to expand
edit Find source with google Find source with iqdb
16235-fu-kak-nekulturno-s-frekenbok.jpg
>>45146
Как же меня бесят эти быдло-кодеры, которые считают, что все банды четырёх и Фаулеры - это дураки, а абстракции - это просто мусор, а потом вставляют сознательно костыли, потому что им проще. Они снова думали, что очевидно, что костыль будет норм. А вот нет. Ну нахуя это было делать, спрашивается. Ясчитаю, необходимо чётко свыкнуться, что есть в программировании такая категория как "нельзя и пиздец". И есть костыли, которые ну не могут не привести к поломке. Это же божественное наказание, ибо ну не могло оно не сломать что-нибудь.
>> No.45148 Reply
>>45147
Я специально для таких как ты написал - "(не публичный)", нужно для работы в консоли, которая только нативный массив умеет удобно показать.
>> No.45149 Reply
>>45148
Да я понял, что ты тут ни причём. Просто у меня бомбит.
>> No.45246 Reply
Тут есть люди, которые не любят использовать библиотеку и стремятся писать ванильный javascript? Я не один такой... Надеюсь.
>> No.45247 Reply
>>45246
У почти всех новичков есть этот фетиш. Никак не могу понять, почему их всегда так это прикалывает.
>> No.45248 Reply
>>45247
Есть и более раздражающая вещь - подтягивать на каждых чих какой-то ссаный jquery, а то и не только его.
Нахватались по самых верхах популярных библиотек и колхозят.
>> No.45249 Reply
>>45247
Себя вспомни, поймёшь.
>> No.45251 Reply
>>45248
Правильно делают. Лучше ссаный джейкуэри, чем стековерфлоу копипаста на стопицот строк для совместимости по всем движкам.
>> No.45252 Reply
>>45251
Лови добра!


'use strict';

window.onload = function () {
   var mainCalcFunc = function (calcParent) {
/* animation fadeIn() */
var fadeIn = function (element) {
  element.style.opacity = 0;
  var last = +new Date();
  var tick = function() {
    element.style.opacity = +element.style.opacity + (new Date() - last) / 600;
    element.style.display = 'block';
    last = +new Date();
    if (+element.style.opacity < 1) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };
  tick();
};
  
/* animation fadeOut() */
var fadeOut = function (element) {
  element.style.opacity = 1;
  var last = +new Date();
  var tick = function () {
    element.style.opacity = +element.style.opacity - (new Date() - last) / 600;
    setTimeout(function () {
      element.style.display = 'none';
    }, 600);
    last = +new Date();
    if (+element.style.opacity > 0) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
    }
  };
  tick();
};
/* wrapper */
calcParent = document.getElementsByClassName(calcParent)[0];
if (!calcParent) {
  return;
}
  
/* header */
var headerMainFunc = function (parent, input, center) {
  parent = calcParent.getElementsByClassName(parent)[0];
  center = calcParent.getElementsByClassName(center)[0];
  input = parent.getElementsByClassName(input)[0];
  if (!parent && !input && !center) {
    return;
  }
  input.addEventListener('input', function () {
    if (this.value.length > 0) {
      if (center.style.opacity > 0) {
        return;
      }
      fadeIn(center);
    } else {
      if (center.style.opacity == 0) {
        return;
      }
      fadeOut(center);
    }
  });
};
headerMainFunc('calc-header', 'type-square', 'calc-center');   
/* center */
var centerMainFunc = function (parent, tabs, context) {
  parent = calcParent.getElementsByClassName(parent)[0];
  if (!parent) {
    return;
  }
  tabs = parent.getElementsByClassName(tabs)[0];
  context = parent.getElementsByClassName(context)[0];
  var lnt = tabs.getElementsByTagName('LI').length - 1;
  tabs.addEventListener('click', function (event) {
    var element = event.target || element;
    if (element.nodeName !== 'LABEL') {
      return;
    }
    if (element.className !== 'tab active') {
      for (var i = lnt; i >= 0; i--) {
        tabs.getElementsByTagName('LABEL')[i].className = 'tab';
      }
      element.className += ' active';
      for (var k = lnt; k >= 0; k--) {
        if (tabs.getElementsByTagName('LABEL')[k].className == 'tab active') {
          for (var j = lnt; j >= 0; j--) {
            context.children[j].className = 'calc-context-description';
          }
          context.children[k].className += ' visible';
        }
      }
    } else {
      if (element.classList && element.className !== 'tab active') {
        element.classList.remove('active');
      }
    }
  });
};
centerMainFunc('calc-center', 'tabs', 'calc-context');
/* footer */
var footerMainFunc = function (parent, inputs) {
  parent = calcParent.getElementsByClassName(parent)[0];
  if (!parent) {
    return;
  }
  console.log(parent);
};
footerMainFunc('calc-footer');
   };
   mainCalcFunc('calculate-parent');
};
>> No.45253 Reply
>>45252
Пресвятые угодники, какое великолепие!
>> No.45255 Reply
>>45249
Я тоже пытался писать без либ, но почему-то не орал, какие они плохие.
>> No.45258 Reply
>>45255
Либы это хорошо, а хорошего по-немножку
>> No.45265 Reply
File: 1377369365282.gif
Gif, 399.67 KB, 488×519 - Click the image to expand
edit Find source with google Find source with iqdb
1377369365282.gif
>> No.45266 Reply
>>45265
Ага, овер 2000кб веса страницы, из них 90кб - джквери, которая загружается единожды, при использовании гугловского цдн она даже будет предзагружена до перехода на сайт, если юзер уже побывал в гугле недавно, и это ещё без использования gzip, который уменьшает где-то до 30. Плюс на супер-крутых сайтах изредка добавляют ангуляр - это ещё 155кб, с gzip - меньше.
Зато вот, 18 вставок чего-то из внешних ресурсов на одной только той странице со ссылки позаблочил мой плагин. Плюс картинки там не как в думе, а весят нормально. Вставки дискаса, ютуба, гифы, шрифты(!!!).
>> No.45319 Reply
>>45266
Зачем шрифты нужны и хайрезы? Вот были бы все сайты как доброчанька. Был бы комфорт и скорость.
>> No.45320 Reply
>>45319
Если бы шрифты брались с cdn, то они бы тоже могли раскачиваться один раз на много сайтов и страниц сразу, всё равно они используют в итоге только около пяти одних и тех же шрифтов(Roboto и Open sans чаще всего). С хайрезами сложно что-то сделать.
>> No.45321 Reply
File: talking_captcha.png
Png, 1.84 KB, 258×15 - Click the image to expand
edit Find source with google Find source with iqdb
talking_captcha.png
>>45320
Ну к слову есть отличные алгоритмы сжатия без потери качества. Которые существенно и неотличимо сжимают размер. Недавно на такой наткнулся. https://compressor.io/ - потести, если интересует. Правда это получается коммунистический интернет, на основе уважения к клиенту.
>> No.45322 Reply
>>45321
Правая часть как-то теплее.
>> No.45323 Reply
>>45321
Кстати, это херня лежит. Ничего не жмёт.
>> No.45324 Reply
https://github.com/pseudonymous/better-better-booru - кто то знает, можно как то на изи поменять на safebooru что бы работало? Может на safebooru кто-то cкрипт похожий встречал?
>> No.45325 Reply
>>45324
Пизец там скриптище на 10к строк. Охота же было возиться.
>> No.45326 Reply
>>45325
Я скопировать хотел в манки, так чуть не охерел, все лагало. Потом допер что есть кнопка RAW.
Что только не сделаешь ради хентая. Лол.
>> No.45395 Reply
Есть вопрос. Что быстрее будет работать? Каков механизм работы метода reverse(именно на пальцах, что там происходит внутри)?

arr.push()
arr.reverse()
arr.push()

или

arr.push()
arr.unshift()
Я новичок и не особо шарю, по тому палками не кидать.
>> No.45396 Reply
>>45395
http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.reverse
[a b c d e]
# #
###<->###

[e b c d a]
# #
#<->#
...
Как оно все там на самом деле в каждом движке устроено сказать сложно. Запусти тест цикл на большом массиве - реверс гораздо затратнее.
Вообще откуда такая идея, для твоего случая пуш-реверс-пуш как-то читабельнее?
>> No.45397 Reply
>>45396
Вижу, кто-то серьезно напортачил с вакабой в последней обнове. http://pastebin.com/raw/F18T7Lhs
>> No.45401 Reply
>>45395
> Каков механизм работы метода reverse(именно на пальцах, что там происходит внутри)?
В консольке поробуй. `[1, 2, 3, 4].reverse()` Выдаст `[4, 3, 2, 1]`.
Согласно MDN:

Метод reverse() на месте обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым. Порядок меняют ВСЕ элементы массива. Об этом говорит первое предложение же.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

Первая последовательность:
var arr = [ 1, 2, 3, 4 ]
arr.push(99) // arr равен [1, 2, 3, 4, 99]
arr.reverse()// arr равен [99, 4, 3, 2, 1]
arr.push(55) // arr равен [99, 4, 3, 2, 1, 55 ]

Вторая последовательность:
var arr = [ 1, 2, 3, 4 ]
arr.push(99) // arr равен [1, 2, 3, 4, 99]
arr.unshift(55) // arr равен [55, 1, 2, 3, 4, 99]
>> No.45403 Reply
File: dobroshot.png
Png, 42.93 KB, 636×400 - Click the image to expand
edit Find source with google Find source with iqdb
dobroshot.png
>>45396
> Вообще откуда такая идея, для твоего случая пуш-реверс-пуш как-то читабельнее?
Прочитал что unshift слишком нагруженный метод и подумал о том что возможно push-revers-push-revers (как уже поправил доброкодер выше) будет лучше.
>>45301
А если допустим мне нужно заполнить только голову, будет выгонее один раз revers и push или постоянно unshif?

Ещё вопрос. В chromium'е иногда выбивает VM288. Я в документацию на английском читаю очень слабо. Не совсем пойму в чем причина и что я могу извлечь из информации в этой вкладке. Вылетает обычно когда хуита в коде, но все же интересно.
>> No.45405 Reply
>>45303
> один раз revers
два раза, один в начале, другой после заполнения*
починил
>> No.45406 Reply
>>45403
Твой скриншот неинформативен.
>> No.45407 Reply
File: 6l6wlzOR86s.jpg
Jpg, 26.09 KB, 403×538 - Click the image to expand
edit Find source with google Find source with iqdb
6l6wlzOR86s.jpg
Сразу скажу: о жабе не знаю вообще ничего. У меня есть готовый скриптец, нужно чтобы после выполнения/в конце выполнения функции текущая страница обновилась. Что именно нужно написать?
>> No.45408 Reply
>>45407
Жаба и жабаскрипт - два абсолютно разных языка программирования.
>> No.45409 Reply
>>45407
location.reload()
>> No.45410 Reply
>>45408
Я знаю. Я о жабаскрипте, конечно.
>> No.45411 Reply
>>45409
Благодарю.
>> No.45412 Reply
>>45407
> о жабе не знаю вообще ничего
Java и Javascript вообще никак не связаны, это два разных яп. Поэтому в слове Javascript никогда не опускают второе слово, вместо этого говорят js иногда.
Надо написать window.location.reload();
Работает без window. почти всегда, но с window. гораздо надёжнее. Если не вдаваясь.
>> No.45438 Reply
>>45412
> Java и Javascript вообще никак не связаны, это два разных яп.
Связаны. http://www.infoworld.com/article/2653798/application-development/javascript-creator-ponders-past--future.html

> ... And the idea was to make it a complementary scripting language to go with Java, with the compiled language. ...
>> No.45441 Reply
>>45438
> And the idea was to make it a complementary scripting language to go with Java, with the compiled language
Да связаны. Это скриптовый язык, чтобы идти с Джавой. Ну то есть была такая мысль. В 1995 году. Ну они ещё тогда вместе с создателями Джавы мутили это.
Пипец как связаны. Где тут вообще связь? Тебя так легко обмануть, анон.
>> No.45461 Reply
Есть такая устаревшия функция:
`function dataURL(type, data) "data:" + (type || "application/xml;encoding=UTF-8") + "," + encodeURIComponent(data)`
Мне нужно её обновить как-то так:
`function dataURL(type, data) {
return "data:" + (type || "application/xml;encoding=UTF-8") + "," + encodeURIComponent(data);
}`
Что ещё нужно? Поясните, плиз.
>> No.45462 Reply
>>45461
Щито это за ЯП?
>> No.45463 Reply
>>45462
JS же. `` по бокам - это я обосрался с разметкой.
>> No.45470 Reply
>>45461
Не понимаю вопроса.
>> No.45477 Reply
А, всё.
>> No.45478 Reply
var users = [{
name: "Вася",
surname: 'Иванов',
age: 20
}, {
name: "Петя",
surname: 'Чапаев',
age: 25
}, {
name: "Маша",
surname: 'Медведева',
age: 18
}];

function byField(field) {
return function(a, b) {
return a[field] > b[field] ? 1 : -1;
}
}

users.sort(byField('name'));
users.forEach(function(user) {
alert( user.name );
});

users.sort(byField('age'));
users.forEach(function(user) {
alert( user.name );
});

Доброкодер. Есть один код. Суть конечно не в нем, а в замыкание. Кто может объяснить каким образом поле field распадается на a и b?
То есть метод sort заворачивает a и b и они хранятся в () до замыкающего вызова анонимной функции?
Наблюдая через инспектора я обнаружил что аргумент field трансформируется из строки в объект, переходя в анонимную функцию. Каким образом это относится к аргументу field я не соображаю.
Я запутано возможно объяснять, так что буду уточнять по мере необходимости и отдаленности ответов.
>> No.45479 Reply
>>45478
Ну вот же compareFunction a и b.
http://www.w3schools.com/jsref/jsref_sort.asp
А замыкание чтобы запомнить значение field.
>> No.45480 Reply
>>45479
> Ну вот же compareFunction a и b.
compareFunction? ты метод sort назвал так? я понял что оно сравнивает подавая a и b, но это значит что они хранятся ожидая пока их не потребует другая функция? И когда она требует, то влазит через field и argument[1]?
> А замыкание чтобы запомнить значение field.
Выстрел в голову.
>> No.45481 Reply
>>45480
Ты сорту даешь функцию сравнения. Сорт подает на вход этой функции два значения от сортируемого массива, а функция отвечает, которое больше, ну и т.д.
Т.е. замыкание создает сортирующую функцию по полю age в твоем примере.

Эта фича взята с перла, кстати. Там бы это выглядело так, может будет нагляднее.
@sorted = sort { $a{'age'} <=> $b{'age'} @array;
>> No.45482 Reply
>>45481
> Сорт подает на вход этой функции два значения от сортируемого массива
Вот! А у нас тут аргумент уже сидит, field! Запускается функция с этим значением field, который не a и b. Доходит до другой функции и запускает её и тут бах field стало a, и появился ещё аргумент b. Вот промежуток между запуском функции и запуском следующей функции, аргумент a и b хранился в области видимости sort?
>> No.45483 Reply
>>45482
field просто висит в scope функции, а сама функция принимает только a и b, которые ей скармливает sort.
>> No.45484 Reply
>>45483
Дело в том что инспектор говорит что field превращается. Вот я и в сметении был.
>> No.45485 Reply
Замыкание как бы понятно когда читаешь, а вот встречаются ситуации что не совсем соображаешь.
Спасибо что помог.
>> No.45490 Reply
var shooter = (function(x) {
return function() {
alert( x );
};
})(i);

Вот в этом коде и в коде что в >>45478 существует разницы, здесь после самовызова присваивается переменной функция, а в >>45478 идет вызов возвращаемой функции, это связано с чем?
>> No.45491 Reply
>>45490
Щто? В том примере надо передать коллбек параметром, а тут самовызов.
>> No.45492 Reply
>>45491
ну результат присвоенная функция, во втором? а в первом результат возвращения результата операции. я не пойму почему возврат не вызывает alert?
>> No.45493 Reply
>>45492
Ты как-то невнятно пишешь.
В случае с сортом функция генерирует колбек с замыканием, который сорт потом вызывает.
Во втором случае ты вызываешь внешнюю функцию с i, она генерирует колбек с замыканем и сохраняет его в переменную. С чего вызываться алерту?
>> No.45494 Reply
>>45493
а если мне калбэк нужен? что делать? что бы алерт например вылетел? ясно, что в данном контексте это бессмысленно
>> No.45495 Reply
>>45494
Тогда надо ещё раз вызвать по цепочке.
})(i)();
>> No.45496 Reply
File: sample_96333656680a09e35df5544a869d18c617251702.png
Png, 451.38 KB, 850×603 - Click the image to expand
edit Find source with google Find source with iqdb
sample_96333656680a09e35df5544a869d18c617251702.png
>>45495
Благодарю. Извиняюсь за невнятность, только проснулся недавно и толком сформулировать нормально не смог, ответ.
Ты так быстро всегда отвечаешь, у тебя юки скрипт оповещает или сам написал?
>> No.45497 Reply
>>45496
Доска медленная же, сразу видно на счетчике.
>> No.45650 Reply
>>45490
А как она тебе вернёт, если ты не вызываешь функцию?

Вот так нужно делать:

var someStr = "Hello, nigger!";

var shooter = (function(x) {
return function () {
console.log(x);
}();
})(someStr);
>> No.45665 Reply
Что лучше?
http://dumpz.org/2199346/
>> No.45666 Reply
>>45665
forEach лучше, чем оба. Зачем i вверху задаешь, а не как нормальные люди в for'e? Про обратный отсчет я не уверен, где-то слышал, что с оптимизациями массивов в движках такой подход только проигрывает.
>> No.45667 Reply
>>45666
> Зачем i вверху задаешь, а не как нормальные люди в for'e?
Мне так книжка сказала делать
> Про обратный отсчет я не уверен, где-то слышал, что с оптимизациями массивов в движках такой подход только проигрывает.
Обратный отсчёт быстрее выполняется
>> No.45668 Reply
>>45667
Что за книжка за такая? Дурная. Надо `for (var i...)`.
По поводу оптимизаций таки да, не отыскал, не знаю откуда это в моей голове. Хотя в 90% случаев, уверен, чисто по .length это никак не скажется на производительности.
https://blogs.oracle.com/greimer/resource/loop-test.html
>> No.45669 Reply
>>45666
i вверху для семантики, видимо. `var i` всеравно запихнет переменную в текущий контекст. Обратный отсчет незначительно быстрее - http://stackoverflow.com/questions/8689573/why-is-iterating-through-an-array-backwards-faster-then-forwards

>>45665
Дай определние "лучше". Первый вариант выполнится быстрее и
не зависит от jQuery, второй - более читаемый.

>>45667
> Мне так книжка сказала делать
Неправильный ответ. Нужно понимать почему тебе так книжка сказала. Алсо, почитай про сравнение let, const и var на досуге.
>> No.45670 Reply
>>45668
> Надо `for (var i...)`.
Ты говоришь хуйню дизинформируешь человека. `for var(i...)` надо писать в нормальных языках, а в JS нужно вдумчиво читать MDN - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var
>> No.45671 Reply
>>45668
> Хотя в 90% случаев, уверен, чисто по .length это никак не скажется на производительности.
По твоей же ссылке:

> Sparse Native Array (length=11519, sporadically populated with 1000 items, looped 100 times)
> Basic for loop. for (var i=0; i<sarr.length; i++) { } 21ms
> ...
> for loop in reverse. for (var i=sarr.length; i--;) { } 5ms
>> No.45672 Reply
>>45669
> Дай определние "лучше".
Робот, лучше - это когда совокупность причин, которые приводят к наиболее благоприятным следствиям. К примеру, возрастает скорость выполнения программы или программа наиболее близко подошла к решению определённой задачи.
> Неправильный ответ.
Правильный ответ, робот. Книжка так сказала, потому что есть такое правило, что в области видимости все переменные стоит объявлять на самом верху, так потом проще читать будет
>> No.45673 Reply
>>45669
> Первый вариант выполнится быстрее и не зависит от jQuery, второй - более читаемый.
Пруфы
>> No.45674 Reply
>>45670
Что ты хочешь сказать? Не писать вар вообще или писать в начале? Из-за хойстинга в js? Почему же на той же mdn по фору везде `for (var i`? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for
>>45671
> benchmark
Да. Кол-во написанного js кода на котором такой подход даст хоть какой-то видимый эффект, вряд ли особо велик. Я не агитирую за обычный цикл, лучше писать обратный, просто та мысль в голове про оптимизации побудила это посмотреть.
>>45672
> так потом проще читать будет
Дичь, зачем мне в голове функции видеть все i j k, которые ты будешь использовать и переиспользовать по её ходу?
>> No.45675 Reply
File: Снимок-экрана-от-2016-06-07-16-18-48.png
Png, 4.79 KB, 136×229 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-06-07-16-18-48.png
>>45669
> Первый вариант выполнится быстрее и не зависит от jQuery, второй - более читаемый.
Мой генерал, вы опять обосрались!
>> No.45676 Reply
>> No.45677 Reply
>>45676
Норм ресурс, спасибо
>> No.45678 Reply
File: Untitled.png
Png, 39.34 KB, 915×522 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>45675
Мне аж больно стало.
>> No.45679 Reply
>>45678
После "блядь" забыл запятую и второй кусок кода должен был содержать console.log('Each:'...) вместо console.log('For:'...). Но суть, надеюсь, ясна.
самофикс
>> No.45680 Reply
>>45678
Может болеешь?
>> No.45681 Reply
>>45678
Лох, про time/timeEnd не знает. Я тоже потестил. 3.1 vs 4.5.
>> No.45682 Reply
>>45679
А почему не через time/timeEnd делаешь?
>> No.45683 Reply
>>45682
Не знал об такой хуйне.
> Лох
Жеж.
>> No.45684 Reply
>>45678
Но ведь это неправильный бенч!
>> No.45692 Reply
>>45684
Составь правильный
>> No.45738 Reply
>>40541
Анон, а как ты смотришь на браузверную RTS на ноде (с серверной стороны) и Angular/jQuery/или просто JS на клиентской стороне?

Причем надо бы сделать, чтобы не падало и не лагало. Вот мне и интересно насколько такой выбор оправдан. использовать ли СуБД (редиску, к примеру) или создавать под одну игру файл для обмена данными.

Кто что знает о браузерной Дюне 2? Лагает она ужасно. Мне интересно почему. Не провалилась ли у них моя задумка, таким образом?
>> No.45739 Reply
>>45738
Эти игры делают с помощью канваса и WebGL, там идёт один тег с растром и всё, никаких jQuery и ангуляров - это всё для тегов. Для игр есть фреймворк Phaser, например.
Мелочёвка не будет ни падать, ни лагать, разве что на мобильнике.
Дюна скорее всего портирована как-то из другой платформы, а не написана прямо на js. А может и руки кривые. От кривых рук тебя ничего не спасёт.
>> No.45740 Reply
>>45739
Ну хорошо, с клиентской частью достигнута ясность. А что с серверной? В общем-то там я и вангую лаги. Понятно, что нода вроде как лучше, чем на php писать такие высоконагруженные вещи, но есть и другие проблемы - хранение/передача данных. Нужна или СУБД или делать уж на файлах. А может ничего не нужно - моментально пересылать смену каждой координаты другому игроку. В общем, интересны пруфы высоконагруженных сетевых игр на ноде.
>> No.45741 Reply
>>45740
На файлах уже никто ничего такого не делает. Есть куча субд.
>> No.45742 Reply
>>45741
по идее можно редиску под эти цели завести
>> No.45785 Reply
Почему функция с document.getElementById("id").value++ где id это хтмл инпут тайп текст и которая висит на онклик button перезагружает страницу сразу после изменения, а вот этот пример http://goo.gl/xW32xM
Меняет страницу без перезагрузки?
>> No.45787 Reply
>>45785
Ладно, я понял что надо начинать jquery ui курить, но всё же, почему?
>> No.45788 Reply
>>45785
Покажи полностью.
>> No.45790 Reply
>>45785
Перезагружает страницу у тебя что-то вообще другое. Скорее всего в твоём js банальная логическая ошибка и неправильно её локализовал.
>> No.45802 Reply
>>45785
Вангую, у тебя button - submit.
>> No.45805 Reply
>>45785
id это хтмл инпут тайп текст и которая висит на онклик button
чтоблять?
>> No.45806 Reply
>>45805
Кодпокажиблятьчтоблюдинегадалинахуй.
>> No.45807 Reply
>>45805
button, "на онклик которая висит ипут", имеет тип. Он указывается атрибутом type. Если он не указан, в разных браузерах и случаях поведение может быть разным. В формах по дефолту он как правило submit, а это значит, что её нажатие вызывает отправку формы.
Тут два варианта - или ты превентишь евент, когда он вызывается, или указываешь тип button:
<button type="button"></button>
Обычно всегда принято указывать тип, иначе поведение непредсказуемо.
Ехал баттон через баттон, добро пожаловать в веб-программирование.
>> No.45832 Reply
File: 1466586495972.jpg
Jpg, 150.26 KB, 1018×1000 - Click the image to expand
edit Find source with google Find source with iqdb
1466586495972.jpg
Скажите как понимать фрейморки и api, api - это большое абстрактное понятие, тогда фреймворк какая частная часть?

Ещё например хотел спросить насчет сoffeescript, это компилятор? Он считается фреймворком или это api?

Спрашиваю для тегирования своих накопившихся закладок.
>> No.45833 Reply
>>45832
Пройдя мимо такого ящика, чувствовал бы себя как говно. Молодцы.
Разные понятия.
> api
Интерфейс взаимодействия с чем-то. Это что-то предоставляет этот интерфейс.
* Один из методов апи доброчана - http://dobrochan.com/api/thread/b/{thread_id}.json
* Браузеры предоставляют апи для работы со своими внутренностями, эти апи используются плагинами (browser.getActiveTab()).
* Браузеры предоставляют различные апи веб скриптам с веб страничек. Например апи взаимодействия с самой страничкой (document.getElementById()) или апи для работы с сетью (new xmlhttprequest()).

> фреймворк
Чтобы проще, фреймворк это жирная библиотека, которая зачастую определяет структуру твоего кода. Иногда фреймворка это обширный набор библиотек для работы с какими-то связными вещами.
* Web фреймворки - упрощают разработку сайтика, могут сразу включать разные библиотеки, например для генерации html'я, общения с базой данных, управление правами пользователей - Django, Ruby on Rails, Yii.
* Фреймворки для построения гуев - кнопочки/окошки/формочки - Qt, GTK, WinForms, Curses.

Coffeescript это язык. Компилятор кофискрипта компилирует код написанный на кофискрипте в джаваскрипт, который можно запускать в браузере (сам кофи не поддерживается).
>> No.45834 Reply
>>45833
Вот есть например аналогия, приватные методы и публичные в объекте. Ты описал API и у меня возникла ассоциация с механикой "публичных методов". Правильно я начал думать?

Фреймворк получается служит, для облегчения осуществления практических целей?
>> No.45835 Reply
>>45834
> приватные методы и публичные в объекте
Точно.

> Фреймворк получается служит, для облегчения осуществления практических целей?
Вообще не понял откуда эта мысль может вытечь, но вроде верно.
>> No.45836 Reply
Кстати по кофискрипту. Вспомнил откуда у меня в голове был вот этот >>45666 сумбур - https://habrahabr.ru/post/268753/
>> No.45837 Reply
>>45835
> Вообще не понял откуда эта мысль может вытечь, но вроде верно.
Ну ты написал, что использует разное сочетание библиотек. NodeJS тоже вроде фреймворк, там движок используется ещё. Нет каких-то четких рамок, кроме цели.

Спасибо за ответы.
>> No.45838 Reply
>>45836
Статья переполнена глупостью, о чём много раз указано в комментариях. Не говоря уже о том, что статья по сути даже не о cs, а о способах работы с массивами в js. Все эти map и reduce на практике очень мало кто юзает.
В статье нигде не сказано, что это фреймворк или апи, откуда сумбур.
>> No.45839 Reply
>>45838
> Все эти map и reduce на практике очень мало кто юзает.
Где-то читал, что особые аутисты мыслят ими.
>> No.45840 Reply
>>45838
1. Мимо. К вопросу анона вообще отношения пост не имеет. Просто вспомнил обсуждение выше и решил отписать.
2. Все что я помню про статью, это какие-то там оптимизации работы массивов где-то, то ли в js, то ли еще в чем-то связанном и ругань в коментах, мол, ваши оптимизации говно или подобное.
> map и reduce на практике очень мало кто юзает
Всегда юзаю.
>> No.45842 Reply
>>45839
Ты сам аутист.
>> No.45850 Reply
>>45839
Фукциональщики любят такие штуки, например вместо охапки форов и переменных берешь такой применяешь последовательно несколько методов и твой массив преобразован к нужному результату, просто, компактно, лаконично.
>> No.45859 Reply
Функциональщик. Люблю мапы.
Мимокрокодил
>> No.45862 Reply
>>45838
> Все эти map и reduce на практике очень мало кто юзает.
Лолшто. Все любят мапы и прочие ништяки. Даже около-функциональный форич весьма уныл, не говоря о кондовом изначальном форе.
Строить цепочки из функциональных вызовов одно удовольствие.
>> No.45863 Reply
Хотя впечатление может быть подпорчено от хуевой реализации, как в том же похапе. Возможно, это и есть причина того поста, лол.
>> No.45881 Reply
File: 1467092938779.jpg
Jpg, 154.22 KB, 984×984 - Click the image to expand
edit Find source with google Find source with iqdb
1467092938779.jpg
Есть здесь новички? Я много нахожу "полезного" материала. Хорошо бы было поделиться.
>> No.45882 Reply
>>45881
Пости прям в этот тред. Ссылки + краткие аннотации о чем там речь.
>> No.45883 Reply
>>45881
Нету тут новичков, не надо ничего постить в этом треде.
>> No.45884 Reply
>>45881
Наверно можно постить, если прям что-то дико интересное.
>> No.45885 Reply
Ладно, создам в /u/ тред. Удачи.
>> No.45886 Reply
>>45885
Кинь сюда ссылку на свой тред, когда создашь.
>> No.45895 Reply
>>45885
Уж лучше бы сюда постил, чем плодить ненужные треды. В /u уже есть тред по вебу.
Честно говоря, не понимаю, зачем нужен этот полезный материал. Весь материал хорошо известен.
>> No.45900 Reply
Как правильно переносить, когда заходит за 80 символов?
>> No.45901 Reply
>>45900
Ты про строки в литералах(кавычках)?
>> No.45903 Reply
>>45901
Про строки, про содержание кавычек. Например при работе с DOM, обычно долгие названия свойств выходят.
Не встречал не разу, как правильно переносить.
>> No.45904 Reply
>>45903
Поделить на куски и конкатенация, так наиболее читабельно.
>> No.45905 Reply
>>45904
Нифига так не более читаемо, тем более затрудняет редактирование.
Из за текста в кавычках длина строки может переваливать за 80 символов. Ничего плохого в этом нет.
>> No.45906 Reply
>>45903
Мой друг, добропожаловать в Джаваскрипт! Что ты чувствуешь, окунувшись в этот модный супер-язык для всех целей?
А если по делу, то если под браузеры, то как правило или конкатенируют, добавляя со второй строки один отступ(http://pastebin.com/raw/cueB6j2h), или стремятся засунуть в html или грузить с аякса, чтобы в js не писать.
В новых версиях браузеров и в ноде(см. caniuse.com) можно строки заключать в `` и тогда всё ок. Если использовать babel, typescript или coffeescript, то не будет проблем с этим тоже.
>> No.45907 Reply
>>45904
>>45905
>>45906
Спасибо вам за особую магию! Низкий поклон.
>> No.45908 Reply
>>45906
> как правило или конкатенируют
Можете мне показать хоть одну популярную библиотеку которая следует этой идиотской практике?
Не порите чепухи и не учите нуба плохим привычкам.
Повторяю: это усложняет работу с кодом. Читаемость это субъективное мнение. По факту, если кому-то надо будет отредактировать этот текст, то ему надо будет его склеить, что для большинства редакторов подразумевает нетривиальный процесс который нужно повторить на каждой строке (попробуйте в своем), и потом переразбить (еще сложнее). Это идиотизм. Этого просто не нужно делать. Вы с ума все посходили.
Конечно когда я говорю сложно, это не реально сложно. Это просто annoying. Вы знаете что совсем не сложно? Это придерживаться 76-символов правила, где не вовлекаются строки. Там реально над этим даже думать не надо. Там это правило нет смысла не соблюдать.
>> No.45909 Reply
>>45908
И как 4 символа решают проблему?
>> No.45910 Reply
>>45908
Вот есть стильгайд от гугла https://google.github.io/styleguide/javascriptguide.xml#Multiline_string_literals
И ещё какой-то популярный https://github.com/airbnb/javascript#strings--line-length
Это за пять секунд в поиске. Иди их поучи.
>> No.45911 Reply
>>45909
Никак, ты прав, 80 символов считается общепринятым стандартом. Сути сказанного не меняет.
>> No.45912 Reply
>>45910
А что делать со свойствами объектов? Можно ли после присваивания, переносить на следующую строчку с отступом?
>> No.45914 Reply
>>45910
Я признаю свою неправоту. Действительно это выглядит не так ужасно как я себе представлял.
Нет, все таки я не понимаю. И как их все таки разбивать, вручную? Переходишь на 80 колонку, назад слово, расчитываешь на то чтомы места хватило вставить ' " +', если его не хватает то назад еще слово, вставляешь, перенос строки, индентируешь, вставляешь '"', повторяешь все заного? Хмм, мне кажется что это идиотское правило. Я не могу спорить со стайл гайдами, но тем не менее я не понимаю мотивации его составителей.
>> No.45917 Reply
>>45914
Пиши сниппет. 5 символов осталось, влепил.
" + "
>> No.45918 Reply
>>45916
Не выйдет, разбиение там идет по словам.
>> No.45919 Reply
>>45917
Тебе нужно вставлять " + перед первым словом, которое заканчивается после 77 символа.
>> No.45920 Reply
>>45919
Да, спасибо, я на скорую ответил.
>> No.45921 Reply
А ведь можно компилировать жс и ничего бы этого нее было бы.
>> No.45922 Reply
>>45921
Не любишь js?
>> No.45923 Reply
>>45912
Выражение разнесенное на несколько строк принято отбивать двумя табами. В джаве. В js видел и одним отбивают и вообще никак и выравнивают с последним методом если цепочка. Не знаю, что популярнее.
Или ты о другом чем-то?
>> No.45924 Reply
Кстати, мы юзали шаблоны js вставленные в html с вставками произвольного кода js. Кое-кто в команде додумался авто-формат запустить в IDE. В результате в шаблонах порвались литералы и код упал.
А ведь где-то там люди занимаются алгеброй типов, делают стат. анализаторы кода и прочая...
>> No.45925 Reply
>>40541
Кстати, интересно, есть вакансии на чистых js-программистов.
>> No.45927 Reply
>>45925
Канвасы шатать?
>> No.45928 Reply
>>45925
Бакенд на ноде писать.
>> No.45929 Reply
>>45928
Это как погрузиться на дно, а потом ещё раз погрузиться на дно.
>> No.45934 Reply
>>45929
Как Жак Ив Кусто? Великий любитель днищ...
>> No.46027 Reply
Перешел на лису, встрял в проблемы, как вы перематываете пошагово, через firebug? У меня F11 и F10 то в консоле вызываются, то в окне браузера. Устанавливал фокус space + ctrl, ничего не помогает. Что делать? Только менять горячие клавиши браузера?
>> No.46034 Reply
>>46027
Никогда таких проблем не было. Можешь отцепить фаербаг в отдельное окно.
>> No.46044 Reply
>>46034
Горячую клавишу поменял.
>> No.46062 Reply
Такое дело. На странице тупо в script глобальные переменные и код, который их использует после загрузки. Никаких функций и ивентов. Как можно туда влезть из юзерскрипта?
>> No.46063 Reply
>>46062
unsafeWindow если сандбокс включен (что-то помимо @grant none в метатдате), если не включен, то наверное прямо из window доступны.
>> No.46109 Reply
Хочу сделать небольшой парсер на js, но чтобы без бекэнда.
Насколько я понимаю, если владелец сам это не разрешит, то нельзя реквестировать страницы с чужого домена. Может есть какой сервис, чтобы проксировать через него? Вроде на яху когда-то было что-то подобное.
>> No.46111 Reply
>>46109
Яху Пайпсы всё в прошлом году, крутейший сервис был, да. В грисманки есть апи для кроссайтовых запросов если такое тебе подходит.
>> No.46112 Reply
>>46111
Хотелось бы именно автономную страничку.
>> No.46113 Reply
>>46112
О, я вспомнил - YQL! Вроде близкое что-то, я когда-то еще это с пайпсами использовал. Есть еще разные scraping сервисы, из бесплатных помню parseHub и import.io.
>> No.46114 Reply
>>46112
А почему автономную то? Запили небольшой сервисок на хероке, с тебя не убудет.
>> No.46210 Reply
Всегда думал, что различия между атрибутом on и методом addEventListener, заключается в том, что первый перезаписывает самого себя и из-за этого мы не можем реагировать на два события сразу, а второй позволяет сколько угодно вешать события и ловить их все.
Потом я встретил решение к такой вот задачки и немного офигел, здесь два on на одном элементе отлично работают.
http://learn.javascript.ru/task/keyboard-mouse Раскрыть решение.
>> No.46212 Reply
>>46210
Правильно офигел. Работает и правильно работает - разные вещи.

https://www.w3.org/TR/html5/syntax.html#attributes-0
> There must never be two or more attributes on the same start tag whose names are an ASCII case-insensitive match for each other.
>> No.46213 Reply
>>46212>>46210
Шо за дичь несете? Офигел потому что было неправильное предположение - "что первый перезаписывает самого себя и из-за этого мы не можем реагировать на два события сразу". Он перезаписывает только обработчик события своего типа, не трогая другие.
>> No.46241 Reply
Котаны, помогите, как сделать, чтобы слово заменялось ссылкой после двойного клика по этому слову. Например, при наведении курсора на выделенное слово, всплывает подсказка, которая сообщает что после двух кликов по слову появится ссылка. Нужно чтобы после двух кликов это слово стало ссылкой. Как это запилить на JS или JQuery?
>> No.46242 Reply
>>46241
В гугле забанили? Первая же ссылка.
https://api.jquery.com/dblclick/
>> No.46243 Reply
>>46241
Самое сложное - вычленить слово. Вот тут чувак обсуждает эт в ответе с двумя решениями:
http://stackoverflow.com/questions/2444430/how-to-get-a-word-under-cursor-using-javascript
Единственное абсолютно стабильное решение - засунуть каждое слово в отдельный span. Но есть подозрение, что на больших текстах это может быть медленно. Второе решение - использовать новые экспериментальные фичи разных браузеров, но на старых браузерах может не работать. Эти фичи несут риск.

Получить выделенный тест легче: http://stackoverflow.com/questions/5379120/get-the-highlighted-selected-text

Для перехода можно конечно заменить кусок текста на тег <a>, но это бессмысленно. Ты можешь из js перейти на другую страницу в нужный момент:
window.location.href = '/some/link';
И всё.
>> No.46244 Reply
>>46242
Я так понимаю, ты копирнул сюда первую ссылку из гугла, не читая ни её, ни вопрос?
>> No.46245 Reply
>>46241
А, стоп. Речь идёт о одном слове в тексте, а не о любом? Ну тогда неинтересно так.
>> No.46246 Reply
>>46242
Братишка, ты не поверишь, 5 страниц пролистал прежде чем сюда написал, не помню как спрашивал, но нихера не нашёл.

>>46243
Сейчас читну, спасибо.

>>46245
Ну да, есть слово, оно должно превращаться в ссылку по двойному клику.
>> No.46247 Reply
>>46246
> Сейчас читну, спасибо.
Это написано для выбора произвольного слова из текста. Для одного конкретного слова всё проще. Тебе не хватает каких-то элементарных знаний.
>> No.46248 Reply
>>46243
Блин, не осилил, я слишком ньюфаг ещё.

>>46244
Видимо именно так он и сделал.
>> No.46249 Reply
>>46247
> Тебе не хватает каких-то элементарных знаний
Знаю, но именно сейчас мне не хватает этой фичи и гугол не хочет или не может мне помочь.
>> No.46250 Reply
>>46248
>>46249
Он ответил всё правильно, это тот анон придумал какую-то хардкорную задачу, лол.
В общем, пихаешь свое слово в <span class="yoba_word">, по классу оформление и на него же вешаешь этот жквери даблклик.
Потом в коллбеке заменяешь контент на свою ссылку.
Делов на две минуты.
>> No.46251 Reply
>>46250
> делов на две минуты
Кому как.
>> No.46252 Reply
Пиздос, карочи.
>> No.46253 Reply
>>46249
Потому что ты гуглишь простейшую фичу, которую редко делают. Гугл не может тебе дать инструкцию на каждую возможную комбинацию команд.
>> No.46254 Reply
File: captcha_1472587899991.png
Png, 8.09 KB, 716×48 - Click the image to expand
edit Find source with google Find source with iqdb
captcha_1472587899991.png
>>46253
Я таки разобрался. Всем спасибо.
>> No.46261 Reply
>>46250
Подскажи еще, в каком направлении искать, чтобы все возвращалось в "как было", ну скажем, секунд через 10 после открытия ссылки?
>> No.46263 Reply
>>46261
Ну у ссылки лови клик и там таймаут на 10 секунд.
>> No.46264 Reply
>>46263
Как это, примерно, должно выглядеть, какую команду юзать? .mouseleave и как-то пришаманить таймер?
>> No.46265 Reply
>>46264
Ну заменяешь на ссылку, потом на .click ссылки вешаешь хендлер, в котором добавляешь задержку через settimeout.
>> No.46266 Reply
File: 141146638712.gif
Gif, 122.45 KB, 476×270 - Click the image to expand
edit Find source with google Find source with iqdb
141146638712.gif
>>46265
Не понял.
>> No.47189 Reply
Привет, тут есть какие-нибудь одинокие доброаноны, которые бы хотели попрактиковаться вместе? Было бы здорово тот же куки-кликер написать или клон ogame на сокетах вдвоём-втроём. Т.е. не самый сложный проект, но попробовать работать командой.
У меня несколько личный проектов, 3 - законченных, но столкнулся с недостатком мотивации для дальнейшей работы. Всё же, это важно, когда можно обсудить что-то, подумать вместе и всё такое.
>> No.49994 Reply
Решил вкатываться во всё это джаваскриптное дело. Чёт пока не очень понятно, как все эти штуки между собой работают, так всё запутано, но интересно.
У меня сразу такой странный вопрос, вы какие-то движки типа jade для html используете? Как-то оно так коряво в нём всё выглядит, что ужас просто.
И с какой стороны в фулстак вообще втекать, а фронта или с бека?
[spoiler]Веб разросся в какого-то монстра, если честно -_-"[/spoiler]


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]