Подтвердить что ты не робот

Uncaught TypeError: Function.prototype.apply: список аргументов имеет неправильный тип (?)

Я получаю сообщение об ошибке Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type, когда я использую метод .apply(), и я не уверен, почему. Мой код здесь.

Когда jsfiddle загружается, нажмите рядом со словом test и нажмите клавишу Enter. Метод, в котором происходит ошибка, равен this.addEvent. Я пытаюсь, чтобы мой объект был 'this' в функции обратного вызова события.

4b9b3361

Ответ 1

Вы должны использовать .call вместо .apply.

a.apply(obj, lst) эквивалентно a(lst[0], lst[1], lst[2], ...), когда lst является массивом (или arguments), используя obj как this.

a.call(obj, x, y, z, ...) эквивалентно a(x, y, z, ...), используя obj как this.

Так как e является одним из аргументов, а не массивом аргументов, вы должны использовать .call.

Ответ 2

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

func.apply(editorObject, [e]); //=> apply expects an array of arguments
func.call(editorObject, e);    //=> call receives arguments directly