2011-05-13 8 views
29

Recibo el error Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type cuando uso el método .apply() y no estoy seguro de por qué. Mi código es here.TypeError no capturado: Function.prototype.apply: Lista de argumentos tiene el tipo incorrecto (?)

Cuando jsfiddle se carga, haga clic al lado de la palabra prueba y presione la tecla Intro. El método en el que se produce el error es this.addEvent. Estoy intentando que mi objeto sea el 'esto' en la función de devolución de llamada del evento.

+6

¿Puede actualizar la publicación, publicando el código aquí, ya que el enlace JSFiddle está roto? –

Respuesta

43

Debe usar .call en lugar de .apply.

a.apply(obj, lst) es equivalente a a(lst[0], lst[1], lst[2], ...) cuando lst es una matriz (o arguments) usando obj como this.

a.call(obj, x, y, z, ...) es equivalente a a(x, y, z, ...) usando obj como this.

Dado que e es uno de los argumentos, no una matriz de argumentos, debe usar .call.

+4

No creo que sea una cuestión de * debería o no debería *. Es perfectamente posible usar 'apply' con una sola matriz de elementos ya que es el segundo argumento. – KooiInc

12

apply espera un objeto de matriz. También puede usar call si desea suministrar argumentos directamente. También puede convertir argumentos en una matriz usando apply

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