Uncaught TypeError: Function.prototype.apply: список аргументов имеет неправильный тип (?)
Я получаю сообщение об ошибке Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type
, когда я использую метод .apply()
, и я не уверен, почему. Мой код здесь.
Когда jsfiddle загружается, нажмите рядом со словом test и нажмите клавишу Enter. Метод, в котором происходит ошибка, равен this.addEvent
. Я пытаюсь, чтобы мой объект был 'this' в функции обратного вызова события.
Ответы
Ответ 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