Ответы пользователя по тегу JavaScript
  • Можно кто код объяснить?

    TrueBlackBox
    @TrueBlackBox
    // Создать функцию work, что она делает понятно, надеюсь
    function work(a, b) {
      alert( a + b ); 
    }
    // Создать функцию spy, которая принимает в себя функцию
    function spy(func) {
        // Создать функцию-обертку, которая принимает в себя все аргументы
        // функции, внутри которой она была вызвана.
        function wrapper(...args) {
          // Сохранить аргументы внутри wrapper.calls
          wrapper.calls.push(args);
          // Привязать функцию, что передавалась как агрумент,
          // к контексту, в котором она будет вызвана
          return func.apply(this, arguments);
        }
    
        // Вот тут начинается полный говнокод. 
        // То, что написано снизу, равноценно следующему:
        // var wrapper;
        // wrapper.calls = [];
        // Почему говнокод? Потому что во первых никто
        // давно в 2020 году не пользуется var. А почему?
        // А потому что эта переменная будет висеть на общее обозрение.
        // Никогда не надо делать так, объявляйте нормально:
        // const wrapper или let wrapper. Более того, не понятно,
        // зачем здесь нужен именно  wrapper.calls. Можно просто создать 
        // переменную const wrapper = [] и пушить в неё.
        wrapper.calls = [];
      
        // Собственно вернуть то что получилось.
        return wrapper;
     }
    
    // Снова говнокод. По итогу теперь work = wrapper, у которого определен
    // метод func как function func(a, b) { alert(a+b) }. work что объявлен в самом начале исчез.
    work = spy(work);
    
    // Здесь вызывается то что получилось.
    work(1, 2); // 3
    work(4, 5); // 9
    
    // Тут выводятся значения из массива, всё понятно
    for (let args of work.calls) {
      alert( 'call:' + args.join() ); // "call:1,2", "call:4,5"
    }


    На скорую руку, я бы это переделал так.
    const argumentsArray = [];
    
    function work(a, b) {
      console.log(a + b);
    }
    
    function loggedArgs(...args) {
      argumentsArray.push(args);
    }
    
    function workAndLog() {
      work(...arguments);
      loggedArgs(...arguments);
    }
    
    workAndLog(1, 2); // 3
    workAndLog(4, 5); // 9
    
    for (let args of argumentsArray) {
      console.log("call:" + args.join()); // "call:1,2", "call:4,5"
    }
    Ответ написан
    8 комментариев
  • На что в данном случае указывает this?

    TrueBlackBox
    @TrueBlackBox
    Постараюсь объяснить. Смотрите, есть функция Dev. Она принимает аргументы, и с ними делает всякое. В момент, когда вы делаете:
    var c = new Dev("Sam", 35, ["Coocing"]);
    что происходит? Создается новая функция Dev, она принимает те аргументы что вы в неё вложили, и результат выполнения этой функции попадает в переменную с. В итоге, переменная с становится объектом, { age: 35, name: "Sam", skills: Array [ "Coocing" ] }. this в даном случае вызывается не на переменную с, а на функцию new Dev, что вы вызываете.
    Ответ написан
    Комментировать
  • Стрелочную или обычную функцию использовать?

    TrueBlackBox
    @TrueBlackBox
    В данном случае без разницы. Разница будет если передавать в листенер отдельную функцию, но это вы узнаете сами позже :)
    Ответ написан
    Комментировать
  • Как правильно реализовать localStorage в Redux?

    TrueBlackBox
    @TrueBlackBox
    Предположу, возможно проблема в том, что при первой загрузке у вас создаётся state со значением undefined. Если у вас при открытии страницы в persistedState undefined, то в редаксе нельзя чтобы в стейте был undefined. Там может быть пустой массив (как в случае initialState), пустой объект, пустая строка, но не undefined. По хорошему, нужно проверить что лежит внутри persistedState при открытии страницы, и от этого плясать дальше. Простите что так расплывчато, не имею доступа к ноутбуку, и Вы не прикрепили скриншот ошибки, так что стреляю на удачу.
    Ответ написан
  • Почему немогу сложить indexof в js?

    TrueBlackBox
    @TrueBlackBox
    А в чём вообще заключается задание? Какая конечная цель?
    Ответ написан