Ответы пользователя по тегу JavaScript
  • Что здесь является this?

    Robur
    @Robur
    Знаю больше чем это необходимо
    this будет равен тому что был установлен для функции в которой эта строка вызывается.

    все. помимо этого не надо усложнять. Ничего никуда не опускается, ничего никуда не подставляется.

    в строке this.renderSquare(0) эта функция render() для функции render в this будет экземпляр Board.
    дальше уже вызывается renderSquare() в которой this - тот же самый экземпляр Board (все как и для render по сути)

    в строке value={this.state.squares[i]} никакой this никуда не передается, из массива squares берется нужное значение и передается 'X' или 'O' без всяких board

    в строке onClick={() => this.handleClick(i)}
    используется стрелочная функция, для того чтобы вне зависимости от того как она будет вызвана в будущем, значение this осталось неизменным, таким каким оно было когда эта функция создавалась (this из renderSquare)

    почитайте как они работают.
    Ответ написан
  • Как понять работу данной функции js? в нее передается несколько параметров или как?

    Robur
    @Robur
    Знаю больше чем это необходимо
    понять можно вот так:

    const func = (e) => {   //....  };
    removeItem = (id) => func
    
    const f1 = removeItem(1)
    const f2 = removeItem(2)
    
    f1(e)
    f2(e)

    removeItem получает id и возвращает func.
    func можно, например вызывать, передав ей e.
    и там внутри скорее всего замыкание (которого в моем примере нет) чтобы func могла получить доступ к id. f1 будет "помнить" что id=1, f2 будет "помнить" что id=2
    Ответ написан
    2 комментария
  • Не пойму ошибку в async await?

    Robur
    @Robur
    Знаю больше чем это необходимо
    раз он не на промисах, то return await connection.query
    сработает сразу после вызова query. await ждет промиса а его там нет. Почитайте подробнее как async/await работает.

    вам нужно конвертировать это в промисы, либо через utils.promisify,
    либо
    const getDataDB = q=>{
      return new Promise(( resolve, reject) => connection.query(q, (err,result)=>{
        if(err) reject(err);
        console.log(1);
    
        resolve(result);
      }));
    };
    Ответ написан
    1 комментарий
  • Как импортировать скрипт js так, чтобы он выполнился?

    Robur
    @Robur
    Знаю больше чем это необходимо
    можете использовать https://webpack.js.org/plugins/copy-webpack-plugin/ чтобы копировать jquery куда вам надо
    или вот это прочитайте там несколько способов в доходчиво progcode.ru/2019/01/12/%D0%B8%D1%81%D0%BF%D0%BE%D0...
    Ответ написан
    Комментировать
  • Как попасть внутрь iframe?

    Robur
    @Robur
    Знаю больше чем это необходимо
    просто так залезть в iframe - никак по соображениям безопасности.
    Только если adSense поддерживает такое желание и шлет оттуда наружу какие-нибудь сообщения через postMessage.
    Ответ написан
    Комментировать
  • Как сделать кликабельный canvas?

    Robur
    @Robur
    Знаю больше чем это необходимо
    canvas.addEventListener('click', function() { })

    Естественно что мышка про круги которые вы нарисовали на вашем канвасе ничего не знает, или вычисляете самостоятельно, или используете svg где круг это отдельный элемент и на него можно повешать свой click обработчик
    Ответ написан
    8 комментариев
  • Можно ли укоротить код с сохранением смысла?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно.
    Ответ написан
    Комментировать
  • Как сессии работают под капотом?

    Robur
    @Robur
    Знаю больше чем это необходимо
    там всего 4 файла по 100-150 строк каждый (половина jsdoc). Зачем вам руководство если вы можете просто заглянуть и посмотреть? Комментарии есть, принцип очень простой.
    https://github.com/expressjs/session/tree/master/s...
    Ответ написан
    3 комментария
  • Как правильно сделать чат?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1. Возьмите react/vue
    2. прикрутите виртуальный скроллинг (это когда у вас 100 сообщений, но рисуются только 3 (или сколько влезет в окошко) которые видимые). Если будет 10000 сообщений - скорость будет такая же, так как рисуются все равно так же мало.
    Ответ написан
    Комментировать
  • Canvas 3d объекты?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Там скорее всего просто набор заранее отрендеренных картинок.
    А для настоящего 3д погуглите webgl
    Ответ написан
    Комментировать
  • Как понять конструкцию Function.prototype.call.bind(unboundSlice)?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Все это затеяно чтобы сократить строку slice.call(arguments);

    основное:
    тут происходит вызов функции call, в которой в качестве this будет slice.
    Соответственно чтобы привязать slice (который будет в this) к call, можно сделать

    const boundCall = slice.call.bind(slice);
    // теперь можно так:
    boundCall(arguments) //то же самое что slice.call(arguments)


    дальше уже несущественные вещи в которых вы запутались, slice.call - это Function.prototype.call, можно заменить одно на другое (но не обязательно):
    const boundCall = Function.prototype.call.bind(slice);
    // теперь можно так:
    boundCall(arguments) //то же самое что slice.call(arguments)


    Ну и что такое slice - это Array.prototype.slice, получаем:

    const slice = Array.prototype.slice
    const boundCall = Function.prototype.call.bind(slice);
    // теперь можно так:
    boundCall(arguments) //то же самое что slice.call(arguments)


    теперь переименуем переменные чтоб было как в mdn - slice в unboundSlice, boundCall в slice, получим

    const unboundSlice = Array.prototype.slice
    const slice = Function.prototype.call.bind(slice);
    // теперь можно так:
    slice(arguments) //то же самое что slice.call(arguments)


    Но все это просто переименование и замена одних букв на другие, что совершенно не меняет логику того происходит, то есть несмотря на громоздкие конструкции, там просто привязывание slice к call в качестве this.

    var slice = Array.prototype.slice;
    const shortSlice = slice.call.bind(slice);
    
    shortSlice(arguments)// то же самое что и slice.call(arguments)


    То что slice в свою очередь тоже функция, как видим, совершенно нигде не проявляется и не имеет значения. тут везде она выступает как объект переданный в this. Остальное - детали реализации call, и это ее дело что она будет с этим объектом делать.
    Ответ написан
    Комментировать
  • Как убрать зависимость отрендереных методом .map компонентов друг от друга?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1. они не зависят друг от друга, вы меняете стейт компонента и рендер вызывается заново. Это нормальное поведение.
    2. переменная message - одна на всех, если вы ее поменяете то во всех разом произойдет изменение - добавится или удалится "отправлено".
    Если у вас проблема в том что вы нажимаете отправить в одном компоненте, а "отправлено" появляется во всех - а хочется чтобы в каждом было свое "отправлено" то вам надо сделать для каждой строки отдельный флаг. Лучше всего - сделать то что внутри Grid отдельным компонентом и перенести message/setMessage туда.
    Ответ написан
    Комментировать
  • Как сделать, чтобы this указывал на текущий объект?

    Robur
    @Robur
    Знаю больше чем это необходимо
    меня интересует почему это не работает в первом варианте?

    потому что и не должно.
    Там происходит совсем не то что вы думаете, а чтобы то, что вы думаете соответствовало реальности, вам нужно прокачивать навык понимания JS.

    в строке bar: this.foo значение this относится к тому месту где все это происходит и не имеет никакого отношения к obj.

    этот код эквивалентен:
    const x = this.foo
    const obj = {
        foo: 'bar',
        bar: x
    }

    подумайте, почему x==undefined, и поймете что происходит у вас.
    Ответ написан
    Комментировать
  • Frontend / Верстка?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Без проблем. Не нравится - не изучайте.
    Только будьте готовы что 97% всех вакансий/проектов пройдут мимо вас, потому что там верстка будет нужна.
    Но вам никто не может запретить попытаться найти остальные 3% и среди этих 3% попытаться найти что-то стоящее.
    Ответ написан
    8 комментариев
  • Современная соц сеть с помощью JavaScript, какие лучше всего использовать технологии?

    Robur
    @Robur
    Знаю больше чем это необходимо
    React подойдет. Express тоже. Nginx тоже. Насчет монго я бы пятнадцать раз подумал, лучше взять sql.
    "Firebase, Heroku, Aws и прочее" тоже подойдет

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

    А так-то абстрактную "соцсеть" можно и на jquery + пачка php файлов сделать, и загрузить на шаред-хостинг по ftp.
    Ответ написан
    7 комментариев
  • Есть ли сервис пример тестирования рекламы?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Возможно сама рекламная сеть дает тестовые криэйтивы, либо задать тестовые устройства на которых реклама не считается. google ads например так делает.
    Ответ написан
    Комментировать
  • Можно ли получить данные через js, но вставить через css ( если да -то как именно)?

    Robur
    @Robur
    Знаю больше чем это необходимо
    добавляете программно тег <style>на страницу и внутрь - что хотите.
    Ответ написан
    Комментировать
  • Ментор или план прокачки?

    Robur
    @Robur
    Знаю больше чем это необходимо
    "раскурить" может за неделю-две и можно, а вот научиться делать нормальные большие приложения с минимумом говнокода - надо побольше времени.

    Для прокачивания одна дорога - использовать и писать приложения. Или пет-проект(ы), или новый проект на работе, или уволиться и уйти туда где все это есть. Максимально быстро - это третий вариант, с условием попадания в хорошую сильную команду.
    Ответ написан
    3 комментария
  • Почему await не работает?

    Robur
    @Robur
    Знаю больше чем это необходимо
    потому что вы ничего из функции не возвращаете. соответственно возвращается undefined.
    И с чего вы взяли что await не ждет? думаю он все ждет, просто то что происходит в коде отличается от того что вы думаете что там происходит.
    Ответ написан
    2 комментария
  • Какая сложность, если передавать массив в конструктор new Set()?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Разная.
    во первых, есть спека, которая описывает что должно произойти при вызове конструктора с коллекцией в качестве аргумента. Это абстрактное алгоритмическое описание, у него сложность как видим O(n) при условии что adder имеет сложность O(1). Если adder имеет другую сложность - то соответственно сложность конструктора так же поменяется, вполне может быть и O(n^2) например. копаться что там может быть в adder мне уже лень, можете выяснить самостоятельно.
    https://tc39.es/ecma262/#sec-set-iterable

    Дальше, есть движок, в котором реализована эта спека. хоть мы и живем во времена дефолт-движка v8, но предполагать что это единственная реализация в мире не правильно. Напимер в файрфоксе - не он. В мобилках - по моему тоже (как минимум на ios).
    Поэтому второй вопрос - в каком движке?

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

    Поэтому третий вопрос - для каких данных?

    Скорее всего, во всех адекватных реализациях так же будет O(n), но утверждать что так оно и есть тоже не корректно, максимум можно предположить с большой степенью уверенности.

    Чтобы сказать точно - надо смотреть в код движка.

    Если у вас на интевью дошло до обсуждения деталей реализации v8 или spidermonkey, или еще чего, то вы должны уже не спрашивать на тостере такие вещи а отвечать. Ну как минимум быть в состоянии найти этот код при необходимости.
    Ответ написан
    2 комментария