Ответы пользователя по тегу JavaScript
  • JS: Как в родительском классе, вызвать метод из дочернего?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Создать объект дочернего класса:
    class parentClass {
      constructor() {
        this.extendMethod();
      }
      extendMethod() { }
    }
    
    class extendClass extends parentClass {
      extendMethod() {
        console.log('Hi');
      }
    }
    
    new extendClass();


    Передать дочерний элемент в родительский:
    class parentClass {
      constructor(child = null) {
        child?.extendMethod();
      }
    }
    
    class extendClass extends parentClass {
      extendMethod() {
        console.log('Hi');
      }
    }
    
    new parentClass(new extendClass());


    Создать интерфейс (базовый класс) и оба класса унаследовать от него:
    class IBase {
      constructor() {
        this.extendMethod();
      }
      extendMethod() { }
    }
    
    class A extends IBase {
      extendMethod() {
        console.log('Hi from A');
      }
    }
    class B extends IBase {
      extendMethod() {
        console.log('Hi from B');
      }
    }
    Ответ написан
    4 комментария
  • Как можно получить доступ к переменной, которая находится в другой функции?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Вот как у вас написано - так и использовать: просто объявить переменную на уровень выше, чем функции, которые её используют. Либо передавать экземпляр класса/объект в нужные функции. Если у вас что-то не получилось - то приводите код. Текущий приведенный код полностью верный.
    Ответ написан
  • Как создать статический массив?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Есть ли вообще в js статический массив нашёл реализацию и может ли он вообще пригодится?

    Да, есть, да, используется. RTFM:
    class Foo {
      static bar  = [];
    }


    Не понятно многомерные массивы это разновидность Двумерных, Трёхмерных или что-то другое?

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

    Зачем нужны зубчатые?

    Затем, чтобы хранить массивы разного размера в одном массиве или блоке памяти.
    Ответ написан
    1 комментарий
  • Как работает метод filter в данном случае?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    RTFM: Array.filter() -> callbackFn

    callbackFn

    Функция-предикат, которая будет вызвана для проверки каждого элемента массива. Если функция возвращает true, то элемент остаётся в массиве, если false, то удаляется.

    0 при конвертации в булево значение приводится к false.
    Ответ написан
    1 комментарий
  • Как отсортировать объект по первым ключам в JavaScript?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Использовать массив. В JS объекты не поддерживают сортировку. За подробностями - в стандарт/поиск, уже много раз было обсуждено и разжёвано.
    Ответ написан
    Комментировать
  • Как на javascript отформатировать такую дату?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    https://day.js.org/docs/en/parse/string-format
    dayjs("2024041213001900", "YYYYMMDDhhmmssSS").format()
    > "2024-04-12T13:00:19+03:00"

    https://momentjs.com/docs/#/parsing/
    moment("2024041213001900", "YYYYMMDDhhmmssSS").format()
    > "2024-04-12T13:00:19+03:00"
    Ответ написан
    Комментировать
  • Как сделать чтобы в js можно было объявить функцию как в python?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Либо пишите свой интерпретатор JS, который работает так, как вам надо либо берете любой существующий интерпретатор JS и в него добавляете требуемый вам функционал. Если совсем просто - то можно обычной регуляркой пройтись по файлам и заменить def f(x): на function f (x) { }. Если хочется синтаксического сахара, то вот вам целая бочка: https://coffeescript.org/ - ложку дёгтя сами добавите или найдёте для разбавления.
    Ответ написан
    8 комментариев
  • Как сделать чтобы нельзя было переназначить socket.on в socketio?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Либо не класть в глобальную область видимости либо убрать из глобальной области видимости. Что-то типа:
    delete window.socket
    Ответ написан
    1 комментарий
  • Как на стороне сервера узнать что клиент закрыл браузер?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    • Подписаться на стороне сервера на событие "разрыв соединения".
    • Периодически отправлять пинг и если нет ответа в течении какого-то времени - то закрывать соединение.
    Ответ написан
    Комментировать
  • V8 и JavaScript - на самом деле являются обо интерпретатороми?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    JavaScript - это интерпретируемый язык программирования, а V8 - это реализация ЯП в виде интерпретатора согласно стандарту (прижилось название "движок").
    Ответ написан
  • Как правильно позиционировать тултип?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Примерно вот так:
    Парковка элементов относительно друг друга через точки
    
        Point: 1|2|3|4
           topLeft     topRight
                  1___2
                  |   |
                  |___|
                  4   3
        bottomLeft     bottomRight
    
        Edges        1
                   _____
                  |     |
               4  |     |  2
                  |_____|
    
                     3
    
        Point format:
          [targetPoint, itemPoint]
    
        Docking variants:
                    [1,3]      [2,4]
                      __        __
        item   ->    |_3|______|4_|
        target ->       |1    2|
                      __|4____3|__
                     |_2|      |1_|
    
                    [4,2]      [3,1]
    
            __
           |4_|___ __
         __|1    2|1_|
        |_3|4____3|
               |_2|
    
                __
         __ ___|_3|
        |_2|1    2|__
           |4____3|4_|
           |1_|
    
           1_________2
           |1_|   |_2|
           |__     __|
           |4_|___|_3|
           4         3


    Я уже реализовывал кучу лет назад данный алгоритм для парковки элементов относительно друг друга с учетом всех важных факторов. И реализация на шарпе получилась объемом в 800 сотен строчек кода с комментариями, при этом сам алгоритм выбора точки - монстр в более чем 300 строчек кода и сплошной набор из пачки ифов глубиной до 6 и до 12 штук подряд, а так же набором свитчей тоже в количестве шести штук и глубиной до двух (местами внутри ифов). И это еще с учетом сокращений за счет некоторых дополнительных математических и логических вычислений. (Откопал еще и JS версию).
    Если кому интересно - пишите, могу поделиться кодом.
    Ответ написан
    1 комментарий
  • Почему некорректно работает округление?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Добро пожаловать в мир вычислений с плавающей точкой! Это вполне нормальное поведение и оно такое везде. Если нужна высокая точность - используйте BigNumber/Decimal и т.п.
    Ответ написан
    3 комментария
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Можно ли из значения из бд сделать переменную js?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    В вашем случаем вам следует использовать объект:
    let prices2 = { DVS: 'DVS' }
    let props = {}
    props[prices2['DVS']] = 5
    console.log(props.DVS)


    Если прям очень хочется именно переменную - то либо руками объявлять и устанавливать в нужное значение, либо писать в глобальную область видимости, что является плохой практикой:
    // Вот так делать очень не рекомендуется:
    window[prices2['DVS']] = 5  // Браузер
    global[prices2['DVS']] = 5  // Нода
    console.log(DVS)


    Есть еще третий вариант: сгенерировать исходный код с объявлениями нужных переменных и либо импортировать его как файл либо использовать eval(), что тоже не рекомендуется.
    Ответ написан
    2 комментария
  • Какова механика работы метода bind?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    bind кэширует текущее значение своего this в момент своего вызова, т.е. он привязывает именно функцию, а не объект, в котором находится функция. Иначе нельзя было бы вызывать bind на просто функции по типу foo.bind(abc). В мануале, кстати, описано что именно она кэширует - там полный список есть: https://developer.mozilla.org/ru/docs/Web/JavaScri...

    Упрощенный пример реализации bind для понимания механизма:
    function binder(that) { 
        let targetFunction = this; // кэш целевой функции
        return function() { targetFunction.call(that) } // В возвращаемой функции используем кэш
    }
    
    let user = {
      name: "Tom",
      intro() {
        console.log("I am " + this.name);
      }
    }
    
    user.intro.binder = binder 
    let f = user.intro.binder(user);
    
    setTimeout(f, 1000);
    
    user.name = "Sid";
    user.intro = function() {
      console.log("Вообще другая функция. name: " + this.name);
    }
    Ответ написан
    1 комментарий
  • Можно ли автоматически урезать качество изображений в React?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Да, можно и это надо делать предварительно на сервере специальными утилитами/сервисами. Во-первых - оптимизация трафика, во-вторых - производительности на клиенте.
    Ответ написан
    Комментировать
  • Пожалуйста оцените стоимость доработки расширения для google chrome?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Примерно в районе 1-50к рублей - большой разброс из-за возможных особенностей расширения, качества его кода, конкретных требований как и куда именно сохранять (все в один файл, по каждому сайту отдельно файл, версионирование и прочее), работа с облаками - там тоже везде свои тараканы, необходимость публикации приложения и т.п.
    Ответ написан
    Комментировать
  • Как в addEventListener в функцию передать переменные, если необходимо так же удалять созданный эвент?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Например можно сделать обретку или использовать bind:
    let handlePasteImage2 = (e) => handlePasteImage(e, $var)
    document.body.removeEventListener("paste", handlePasteImage2, true);
    document.body.addEventListener("paste", handlePasteImage2, true);
    Ответ написан
  • Возможно ли создавать приложения для Windows и Linux на JavaScript, html и css?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Зачем в toString и substring передаются аргументы?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    3 комментария