Задать вопрос
  • Что в данном примере передается через this?

    search
    @search
    мама говорит что я особенный
    Вы всё верно поняли, по идеи
    [].indexOf.call(document.querySelectorAll(s), this)

    то же что и
    document.querySelectorAll(s).indexOf(this)

    Но document.querySelectorAll() возвращает коллекцию типа NodeList и это не тоже самое что Array, поэтому у неё отсутствует свой метод indexOf(). Так что конструкция [].indexOf.call(document.querySelectorAll(s), this) - это такой хитрый способ выполнить indexOf над объектом у которого нет метода indexOf. Я так подозреваю что где-то в недрах indexOf() превращает this в массив при помощи Array.from(). В этом можно убедиться, например, получив "1" при выполнении [].indexOf.call('abc', 'b') и "-1" при выполнении [].indexOf.call(1, 1).

    По-хорошему изначальную конструкцию можно переписать в

    Array.from(document.querySelectorAll(s)).indexOf(this)


    Тогда она будет вызывать меньше вопросов.
    Ответ написан
    Комментировать