• В чем отличие объявления этих двух функций?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Как давно в JS можно не писать function в первом примере?

    Ключевое слово function можно опускать в определенных ситуациях:
    let bar = {
        test: 'A',
        foo() {
            console.log(this.test);
        }
    }
    
    bar.foo(); // A
    
    class Bar {
        constructor() {
            this.test = 'B';
        }
        foo() {
            console.log(this.test);
        }
    }
    
    (new Bar()).foo(); // B

    Разумеется для старых браузеров нужен Babel. В остальных случаях запись вида test(){} вызовет ошибку Uncaught SyntaxError: Unexpected token.
    Ответ написан
    Комментировать
  • Почему оперативная память так подорожала?

    15432
    @15432
    Системный программист ^_^
    Год назад DDR4 оперативки произвели много, а покупали мало. Фирмы себе в убыток снизили цены, чтоб хотя бы что-то продать. Теперь же обратная ситуация, производить стали меньше, а народ пошел активно покупать - и подняли цены, вышли на прибыль и т.д.
    Ну и конкуренции нет, всего 3 фирмы производят DRAM. Договорились между собой о ценах и повышают. Прибыль всем хочется
    Ответ написан
    8 комментариев
  • В чем причина разной работы JS с let и var?

    lazalu68
    @lazalu68
    Salmon
    Ну это же уже миллиарды раз обсосано, обсуждено, оговорено и так далее; зачем вы задаёте новый вопрос, если очевидно что ответы на все ваши вопросы есть в интернетах.
    Ответ написан
    2 комментария
  • Как заменить часть ссылки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    text.replace(/http:/g, 'https:')
    Ответ написан
    Комментировать
  • Как подменить IP (только в браузере)?

    DevMan
    @DevMan
    ходить в инет через офисную сеть.
    всегда ваш, кэп.

    если просто, то никак.
    если сложно, то читать первый абзац.
    Ответ написан
    3 комментария
  • Правильно ли я делаю reject Promise внутри fetch?

    @RidgeA
    fetch промис возвращает, не нужны еще дополнительно оборачивать
    return fetch(`/api/items/create/`)
            .then(response => response.json())
            .catch((err) => {
              window.console.error(err);
              throw err;
            });
        });
    Ответ написан
    2 комментария
  • Как запушить элемент в массив объекта?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    просто добавьте проверку на существование, если не существует то инициализируйте пустым массивом: team.items = team.items || []

    this.items.forEach((item) => {
       this.teams.forEach((team) => {      
          if (item.team_id === team.id) {
              team.items = team.items || [];
              team.items.push(item);
          }
      });
    });
    Ответ написан
    Комментировать
  • Как одновременно запустить 2 сервера?

    search
    @search
    мама говорит что я особенный
    Проблема в том, что если разделять скрипты &&, то npm будет ждать пока завершится предыдущий скрипт перед тем как запустить следующий. Но суть ng в том, что он не завершается автоматически.

    Для того чтоб запустить cкрипты параллельно, используйте одинарный &:
    ng s & json-server --watch db.json --port 3000
    Ответ написан
    Комментировать
  • Что нужно изучить чтобы найти олимпиаднику работу?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Самый важный навык, который должны изучить все новички - умение гуглить.
    Ответ написан
    Комментировать
  • Стоит ли подписывать такие картинки?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    alt обязательно, sitemap нет
    Но я бы не делал такие картинки с помощью img. Для этого есть svg, иконочный шрифт, спрайты. А с ними вопрос отпадет сам собой.
    Ответ написан
    Комментировать
  • Как сделать документацию к коду?

    @kn0ckn0ck
    Продюсер
    Есть две крайности, которых лучше избегать:
    1. красивая и исчерпывающая документация требует колоссальных ресурсов на поддержку
    2. сложно воспринимаемый код, без малейших подсказок с чего все начинается и чем заканчивается

    Стандартные решения:
    1. самодокументируемый код, составленный так, что читающий может понять что для чего и в какой последовательности работает.
    2. описание интерфейсов (назначение метода, тип/суть параметров и т.п.) в форме комментов в коде.
    3. автоматическая документация (генерится из комментариев) - эффективно, только если сам код закрыт.
    4. модульные тесты, фиксирующие требования к коду и демонстрирующие его использование.
    5. описание высокоуровневого дизайна (High Level Design, HLD), описывающий какие элементы существуют, их взаимосвязь друг с другом и основные сценарии взаимодействия.

    Работающая документация - это компромисс из этих практик, релевантный конкретной ситуации.

    Кстати, проектная работа, это не только документация к коду, это еще и свод правил, которые позволят архитектуре не расползтись кто в лес кто по дрова, а также сохранят стилистику написания кода для единообразия и легкой поддерживаемости кода.
    Ответ написан
    12 комментариев
  • Верстальщики пользуются мышкой?

    iiiBird
    @iiiBird Куратор тега Вёрстка
    Пока ты спишь - твой конкурент совершенствуется
    именно в верстки ты не сможешь на 100% лишиться работы с мышью. любые параметры визуальных составляющих тебе придется смотреть мышью. будь то фотошоп(размеры, цвета, шрифты и пр) или девтулс в браузере.
    p.s. вот хороший обзор плагина, для первого шага к отказу от мыши тебе https://www.youtube.com/watch?v=6OIBxzgLNFE
    Ответ написан
    1 комментарий
  • Как сделать красивее?

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

    По 2 блоку:
    Я бы сократила количество пунктов до 4-6 и выбрала другие иконки.
    Если выбирать иконки с тонким контуром, то их стоит увеличить и выбрать более, так скажем, красочные.
    5a4ed7d9879b7295734094.png5a4ed943d17b4089226844.png

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

    Если уж совсем нельзя сокращать пункты, то можно сделать примерно так
    5a4eda3b4dd24750047327.png5a4edc5a9a153462386293.png5a4edeb1bdce9125589044.pngПо 1 блоку:
    Возможно, здесь тоже стоит уменьшить количество этапов и выбрать наиболее подходящие изображения.
    5a4ed8ad36b53434649011.png5a4edd23417be475120536.png5a4ed7c8719f1956312610.png
    Или убрать изображения и иконки вовсе и оставить только номера.
    5a4edd56733c5281879035.png5a4ede23cab38322775409.png

    Можно сделать в виде линии с этапами.
    5a4edfcee7210305554542.png5a4ee02feba72534131716.png

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

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

    В принципе, идей можно подобрать достаточно много. Можете еще посмотреть идеи на таких сайтах и подобрать наиболее подходящий вариант.
    Ответ написан
    Комментировать
  • Битовое отрицание в JS

    Weageoo
    @Weageoo
    Всё просто: побитовые операторы в js работают только со знаковыми (signed) целыми (integer) длиной в 32 бита (оператор >>> работает с unsigned). Иными словами, побитовые операторы интерпретируют операнды как последовательность из 32 битов.

    Т.о., при выполнении ~3 число 3 представляется в виде 0000 0000 0000 0000 0000 0000 0000 0011, результат, понятное дело 1111 1111 1111 1111 1111 1111 1111 1100 — это -4. Если крайний левый (знаковый) бит равен 0 — число положительное, если равен 1 — число отрицательное. Максимальное знаковое целое, которое уместится в 32 бита — это 0111 1111 1111 1111 1111 1111 1111 1111, или 2147483647 (по основанию 10). Минимальное 32-bit signed integer — это 1000 0000 0000 0000 0000 0000 0000 0000, или -2147483648.

    2147483647   0111 1111 1111 1111 1111 1111 1111 1111
    100          0000 0000 0000 0000 0000 0000 0110 0100
    5            0000 0000 0000 0000 0000 0000 0000 0101
    4            0000 0000 0000 0000 0000 0000 0000 0100
    3            0000 0000 0000 0000 0000 0000 0000 0011
    2            0000 0000 0000 0000 0000 0000 0000 0010
    1            0000 0000 0000 0000 0000 0000 0000 0001
    0            0000 0000 0000 0000 0000 0000 0000 0000
    -1           1111 1111 1111 1111 1111 1111 1111 1111
    -2           1111 1111 1111 1111 1111 1111 1111 1110
    -3           1111 1111 1111 1111 1111 1111 1111 1101
    -4           1111 1111 1111 1111 1111 1111 1111 1100
    -5           1111 1111 1111 1111 1111 1111 1111 1011
    -100         1111 1111 1111 1111 1111 1111 1001 1011
    -2147483648  1000 0000 0000 0000 0000 0000 0000 0000
    

    ~~3.14 // 3

    Шаг 1: число приводится к целому и представляется в виде последовательности 0000 0000 0000 0000 0000 0000 0000 0011.
    Шаг 2: производится сама побитовая замена 0->1 и 1->0. Получаем 1111 1111 1111 1111 1111 1111 1111 1100, или -4 (по осн. 10).
    Шаг 3: производится ~(-4), то бишь получим в итоге 3.

    Ну, с нулем всё понятно думаю.
    Ответ написан
    1 комментарий
  • Правильно ли определил классы в игре?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    можно ли писать функции внутри методов

    Можно, но надо понимать, что для читабельности и производительности этого лучше не делать (функция будет создаваться при каждом вызове метода).

    два класса: Игрок и Игра

    Лучше было бы разделить логику и отображение, сделать класс Game, который отвечает за переход хода и просчет выигрыша, и Field, который отвечает за работу с DOM и отображение.
    Класс Player содержит только одно поле и никаких методов, его полезность крайне сомнительна. По факту его можно свести к Game#currentPlayer.
    Смысл класса в том, что он является самодостаточной сущностью, а у вас методы постоянно обращаются к глобальным переменным.

    ceil[i].addEventListener("click", currentStep);
    Почитайте про event delegation — можно и нужно обойтись одним обработчиком на общем родителе.

    z === "X"
                      ? dataX.push(num) && this.classList.add("x")
                      : dataO.push(num) && this.classList.add("o");

    Длинные тернарные операторы плохо читаются, и использовать их надо только там, где вам нужно выражение (которое возвращает значение). Сделайте просто if-else ВЕЗДЕ, у вас нет ни одного места, где бы он был нужен:)

    this.getAttribute("data-ceil") — просто this.dataset.ceil (кстати, это называется cell)
    Ответ написан
    Комментировать
  • В Go – динамическая типизация?

    longclaps
    @longclaps
    Смотри, переменная - это то, к чему можно обратиться по имени.
    var x string - это переменная с именем x
    А что такое len(x)? Это - некоторое значение, которое по ходу дела вычисляют.
    Как вычисляют? Да вот вызывая len(x) и вычисляют.
    Где оно находится? Нигде, его лишь можно передать куда-то для сохранения или дальнейших вычислений.
    Как его можно сохранить? Присвоив какой-то переменной, например sz := len(x).
    Но в этот момент эта переменная начинает жить своей жизнью и больше уже не зависит от строки x, которую можно поменять.
    Вычисляя выражения, ты можешь делать что угодно, в том числе преобразование типов, как в твоём вопросе.
    Это безопасно, ведь выражение - вот оно, прямо перед тобой записано, всё наглядно.
    Присваивая значение переменой, ты можешь - ... ну тут в разных языках по-разному.
    В языках с динамической типизацией ты можешь присвоить ей зачение любого типа - и в этом есть опасность. Ты можешь просто не видеть или не знать, что где-то в другом куске кода кто-то что-то туда запихнул. Статическая типизация от этого защищает.
    Вообще-то и в языке со статической типизацией есть подобная опасность - где-то кто-то запихнул в переменную значение правильного типа, но невалидное, например ноль в знаменатель дроби. Поэтому изобретены языки, которые обходятся без переменных, одними лишь выражениями. Но это - уже другая история.
    Ответ написан
    Комментировать
  • Как сделать неподвижный бэкгрануд?

    amux
    @amux
    alp.ac
    Это можно сделать при помощи css, js тут не нужен.
    background-attachment: fixed;

    cssreference.io/backgrounds
    Ответ написан
    Комментировать
  • Хорош ли MODx и чем?

    @asd111
    Админки в laravel генерируются, либо для CRUD генерируется код и потом добавляется проверка прав доступа - вот и вся админка. Поверьте лучше один раз научится этому чем копаться внутри CMS.
    В вашем случае главный недостаток modx в том что если вы научитесь им пользоваться, то не сможете потом этот навык продать. А если вы сделаете на laravel (пусть без vuejs), то потом сможете найти хорошую работу.
    CMS подходят когда нужно быстро сделать и не менять логику работы, т.е. поставил - работает, разве что шаблон поменять, а если нужно менять логику работы, то архитектура CMS скорее мешает чем помогает.

    Для laravel много бесплатных генераторов админок:

    https://the-control-group.github.io/voyager/
    laraadmin.com
    https://github.com/LaravelDaily/quickadmin
    https://github.com/z-song/laravel-admin
    labs.infyom.com/laravelgenerator
    https://github.com/appzcoder/crud-generator
    https://backpackforlaravel.com/
    https://github.com/LaravelRUS/SleepingOwlAdmin
    Ответ написан
    4 комментария
  • Почему не работает transition для background-image?

    dimovich85
    @dimovich85 Куратор тега CSS
    https://u-academy.net/
    Не работает и работает не будет! Надо понимать, что такое переход из состояния в состояние, а что такое дискретность. Дело в том, что есть состояния, которые плавно перетекают, а есть только такое или такое. Например, ребенок растет плавно, вот ребенку один год, вот прошло два месяца и уже год и 2 месяца, как ни странно, а вот ему уже 43, а есть (сейчас не будем про хирургию) дискретное состояние ребенка или человека, это девочка или мальчик, человек либо родился такого пола, либо другого, нет переходного состояния, как в случае с возрастом. Зачем это понимать и знать? Потому что transition отработает только для свойств, которые переходные, но не дискретные. Например, есть ширина 0 пкс, добавим 1 пкс и ширина уже 1пкс, добавим еще 20 - 20пкс, такое свойство можно анимировать. Есть прозрачность 0, а есть 0.1, а есть 0.2, 0.5, 1 - тоже можно. Но, есть display: block, а есть display: none, это дискретные состояния, либо есть, либо нет, анимации не будет, зато можно блок показать/скрыть с помощью анимации на его ширину, высоту, прозрачность... Цвет, как ни странно это тоже величина, которая имеет переходные состояния, например в препроцессорах можно написать #ccc + #eee и получить новый цвет, так как цвета задаются, по сути, просто числом, и увеличивая/уменьшая число получаем анимацию. А какой переход между двумя картинками? Никакого, только такая картинка или такая, поэтому, чтобы сделать плавную анимацию надо пробовать, разве что, прозрачность блока с фоновым изображением.
    Ответ написан
    8 комментариев