• Метод call объекта-функции в js как работает?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    У массивов есть метод indexOf()
    Но его, видимо, нет у this.children, а хочется.

    Поэтому берут пустой массив [] и его метод indexOf
    и вызывают его через call() (подробнее)
    применительно не к тому пустому массиву,
    а подставив методу indexOf в качестве this (где искать) — this.children,
    и вместо 1-го аргумента (что искать) — event.target

    Этот код ищет event.target среди this.children
    и возвращает его индекс или -1, если не нашлось.
    Ответ написан
    Комментировать
  • Метод call объекта-функции в js как работает?

    @abberati
    frontend-разработчик
    Давай по порядку

    const result = [].indexOf.call(this.children, event.target)


    []
    Пустой массив

    [].indexOf
    Метод массива. Он же функция. Если вызвать его как есть ([].indexOf(42)), то он будет искать в пустом массиве, следовательно ничего не найдёт. Он работает на this, то есть в теле этого метода this указывает на массив [], по this и происходят итерации для поиска. В случае [1,2,3].indexOf он внутри будет итерироваться по this, которое указывает на [1,2,3]

    [].indexOf.call
    Метод любой функции. Позволяет вызвать этот метод с явным указанием, чем будет являться this. В приведённом примере это this.children. Все остальные аргументы будут переданы в indexOf.

    Трюк в том, что метод indexOf есть только у массивов, но искать индекс этот метод может не только в массиве, но вообще в любой структуре, у которой есть поле length и остальные поля, доступные через численный ключ.

    Приведённая запись – способ вызвать метод массива на псевдомассиве.
    Ответ написан
    Комментировать
  • Метод call объекта-функции в js как работает?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    6 комментариев