Ответы пользователя по тегу JavaScript
  • Как сделать динамический import * from*?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Конструкция import намеренно сделана статической, чтобы статический анализ, tree-shaking, блаблабла. Все уши прожужжали этим.

    Зато недавно появился proposition dynamic import, который принимает путь, созданный в рантайме, но там придется пошаманить с Promise.all и/или async/await.
    Ответ написан
    2 комментария
  • Почему uppod player не работает внутри компонента vue?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    created вызывается на момент, когда компонент еще не в DOM — ну и уппод очевидно не находит элемента с таким id. Попробуйте mounted.
    Ответ написан
    1 комментарий
  • На что переехать с knockout.js и стоит ли?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    vue.js оставался в тени до недавнего времени, пока его не начали активно раскручивать после выхода версии 2.0. А так фреймворк шикарный.
    Ответ написан
    Комментировать
  • Логично ли данное ООП поведение в javascript и отличается ли оно от c++ и java?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Вы так говорите, будто существует какое-то эталонное ООП, хранящееся в палате мер и весов в Париже. ООП -- это несколько принципов, которые можно трактовать по-разному (Алан Кей, ЕМНИП, сказал: "Я изобрел термин ООП, но я не имел ввиду C++"). В JS вообще классов не было до недавнего времени, да и сейчас это тонкий слой синтаксической сахарной пудры над прототипами.

    Когда мы в JS обращаемся к свойству объекта, то движок сначала ищет это свойство в самом объекте. Если свойство не найдено, то идем в объект, который записан как прототип этого объекта, и ищем в нем. Повторяем этот шаг, пока не найдем свойство или не дойдем до Object.
    Когда мы вызываем метод объекта через точку (типа b.bar()), то он выполняется в контексте этого объекта b. super.foo() пропускает первый шаг в поиске свойства, берет метод сразу из прототипа прототипа и тоже выполняет его в контексте b. А в контексте b метод bar у нас переопределяет родительский метод, поэтому у нас получается бесконечная рекурсия, которая насильно обрывается движком.

    Что должно быть в Java/C++ я вам не подскажу, к сожалению. Возможно, там будет поведение, которое вы ожидаете.
    Ответ написан
    Комментировать
  • Как заставить работать vue-router?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    А в принципе роутинг заработал? Просто статичный компонент, без ленивой загрузки, показывается?

    Вообще require не делает ленивую загрузку, ее делает require.ensure, то есть будет как-то так (писал из головы, смотрите доки):

    function view(name) {
        return function (resolve) {
            require.ensure(['./views/' + name + '.vue'], (require) => {
                const loadedComponent = require('./views/' + name + '.vue');
                // тут еще наверное шаг монтирования загруженного компонента
                resolve();
            });
        }
    }


    Ну и пора начинать использовать import() вместо нестандартных расширений нестандартного механизма:)
    Ответ написан
  • Много самостоятельных js это нормально?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Да, только надо использовать модули, и в прод собирать webpack'ом или чем-то таким.
    Ответ написан
    Комментировать
  • Какой JS фреймфорк/библиотеку выбрать?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Прекрасная возможность сесть на поезд vuejs, который обещает быть востребованным.
    Ответ написан
    Комментировать
  • Цель Redux \ Flux архитектуры?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Чтобы разделить бизнес-логику и представление.
    Для маленьких приложений типа учебного списка дел выгода от библиотеки управления состоянием может быть не очевидна, но по мере роста количества сущностей, которыми надо управлять и которые могут влиять на самые разные части UI вместе и по отдельности, нужда в каком-то упорядоченном решении возрастает.
    В redux и правда многовато заморочек, как по мне:)
    Ответ написан
    Комментировать
  • Как с помощью gulp правильно собрать js с учетом переменных среды?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Смотря чем собираете. Для webpack EnvironmentPlugin, для browserify -- envify, или даже проще с алиасами выкрутиться.
    Ответ написан
  • Для чего нужно это указывать тип второй раз?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    • Компилятор подскажет, если внутри функции ошибка и вы пытаетесь вернуть объект неправильного типа (например, опечатка collor вместо color).
    • Результат выполнения функции будет иметь определенный тип и IDE подскажет, какие у mySquare есть свойства, а компилятор выругается на попытку использовать несуществующие свойства.
    • Функция будет совместима по сигнатуре с другими аналогичными функциями (обработчики событий, action'ы в Redux и т.д.)


    Я бы кстати вынес этот тип в отдельный интерфейс, так проще будет потом код разбирать, имхо.
    Ответ написан
    Комментировать
  • Как запустить Angular Universal чтобы не хотелось кинуть камень в того, кто это придумал?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Хз, что это, но typings устарел более полугода назад и больше не используется. То есть это дело не обновлялось после релиза Angular 2.
    Ответ написан
  • Может ли Lua потенциально заменить Javascript?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Ну а собственно смысл заменять один динамический скриптовый язык на другой динамический скриптовый язык? Какие это преимущества даст? какие задачи решит, какие ограничения снимет? Я не имею ничего против Lua, но чем она лучше JS?

    Можно сделать это прямо сейчас (как минимум Nginx и Tarantool скриптуются на Lua), на клиенте есть Lua.js, но смысл есть только вы знаете только Lua, нужно срочно сделать сайт и нет времени учить что-то еще.
    Ответ написан
    Комментировать
  • Как сделать динамические маркеры на Yandex Map?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Я делал примерно так:

    // создаем шаблон
    const IconTemplate = ymaps.templateLayoutFactory.createClass(
        '<div class="myIcon {% if (properties.isActive) %}isActive{% endif %}"></div>'
    );
    
    // создаем placemark с этим шаблоном
    const mark = new ymaps.Placemark(
        coords,
        {isActive: true}, // этот объект доступен как properties в шаблоне
        {iconLayout: IconTemplate}
    );

    Ну а в шаблоне можно уже наворотить что угодно.
    Ответ написан
    Комментировать
  • Возможно ли освоить React Native, без знаний React.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    React Native это просто компиляция JSX в нативные для платформы виджеты. Писать на нем, не зная JS и JSX, просто нет смысла.
    Ответ написан
    Комментировать
  • Как остановить таймер?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    "Скрытые замыкания", ЕМНИП, это страшилка времен IE6-8.

    Я упростил ваш код до такого и он работает:

    function Some() {
        this.id = Math.floor(Math.random() * 1000);
        this.timer = setInterval(() => {
            console.log('чем-то гажу в консоль');
        }, 1000 * 1);
        this.stop = () => {
            console.log(this); // тут видно, что контекст действительно правильный
            clearInterval(this.timer);
        };
    }
    
    const some0 = new Some();
    
    setTimeout(() => {
        some0.stop();
    }, 3000);


    Замечу, однако, что в вашем коде функция Some не закрыта и включает в себя app.route и прочее, то есть вы не рассказываете всей правды и понять, что же именно не так, довольно трудно.
    Еще у вас pool это массив, а используется как объект. Плюс вы используете стрелочные функции, но эмулируете класс через стремные костыли.
    Ответ написан
  • Можно ли сделать ссылкой псевдокласс (:before, :after)?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Псевдоэлементы ::before и ::after удобны для сугубо оформительских целей. Поскольку отловить клик по ним можно только сравнивая координаты клика мыши с их координатами, использовать их для интерактива крайне неудобно.
    Ответ написан
    Комментировать
  • JavaScript, геттеры и сеттеры в конструкторе класса, как лучше?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Ну если нужны геттеры и сеттеры именно в классе, не в инстансе, то можно так:
    class {
        get prop() { return this._prop; }
        set prop(value) { this._prop = value; }
    
        static get staticProp() { /* и так далее */ }
    }


    Если же каждый инстанс получает свои геттеры и сеттеры по каким-то хитрым правилам, то я бы пожалуй так и оставил это в конструкторе (ну вынес бы в отдельный метод, разумеется). Еще вариант сделать на Proxy. Или на декораторах, но это уж без транспиляции совсем никак.
    Ответ написан
    Комментировать
  • Сортировка по убыванию/возрастанию на vue.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    В чем вопрос, вы не знаете, как отсортировать массив на данному полю? Возьмите _.sortBy.
    Ответ написан
    2 комментария
  • Что такое потоки в node.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Это такая штука, которая выдает (или принимает, или и то и другое) данные кусочками (chunk). Чтобы объяснить, зачем они нужны, нужно немного отвлечься и вспомнить, как работает nodejs.

    Преимущество nodejs состоит в том, что пока БД или ФС реагирует на команду, мы можем запустить другой коллбэк. За счет этого мы можем обработать много запросов какбэ параллельно, но с точки зрения программиста параллельности нет, потоков нету, race condition не возникает и башка у него об этом не болит. И у нас все быстро работает, пока ни одна функция не занимает процессор слишком надолго, пока она не работает слишком долго. А если она займет, то, в силу однопоточности, у нас все остальные запросы зависнут.

    Но иногда нам все-таки сделать большую работу — прочитать или записать большой файл, например. С помощью потоков мы дробим эту работу на кусочки, которые не занимают проц надолго. Это не всегда возможно, но в большом количестве случаев вполне себе работает.

    P.S. В данном ответе речь идет о stream (не путать с thread).
    Ответ написан
    5 комментариев
  • Nodejs/express + ES6 рекомендации?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    1. Как можно использовать ES6 в такой сборке, также перегонять файл server.js через babel или как?

    ES2015 aka ES6 поддерживается полностью, кроме модулей. 2016+ — есть нюансы, смотря что нужно.
    Использовать можно через хук.

    2. Как nodejs/express можно будет использовать в связке с React/redux, какая структура проекта должна быть в таком проекте (1 или 2 packege.json должно быть и тп.)?


    Зависит — если у вас изоморфное приложение, то все в одной директории, один package.json. Если классическое SPA, то можно и разделить, особенно если бэк и фронт будут разные люди делать.

    Пара полезных ссылок: https://github.com/vmasto/express-babel
    https://github.com/zeit/next.js
    Ответ написан
    Комментировать