Estoy buscando una manera de llevar a cabo una tarea determinada y que es, al pasar deEvitar .call() y .apply() usando .bind()
jQuery.when.apply(null, promiseArray).done(...)
a
when(promiseArray).done(...)
Como ya sabrá, .bind()
se puede usar para crear algo así como argumentos predeterminados y también para hacer algunas cosas bastante ingeniosas. Por ejemplo, en lugar de llamar siempre
var toStr = Object.prototype.toString;
// ...
toStr.call([]) // [object Array]
podemos hacerlo como
var toStr = Function.prototype.call.bind(Object.prototype.toString);
toStr([]) // [object Array]
Esto es bastante fría (incluso si hay una penalidad de rendimiento invocando .bind()
como esto, lo sé y estoy consciente de ello), pero realmente no puedo lograrlo para jQuerys .when
llamada. Si tiene una cantidad desconocida de objetos prometedores, por lo general los inserta en una matriz, para luego poder pasarlos a .when
como en mi primer fragmento de código anterior.
que estoy haciendo esto hasta ahora:
var when = Function.prototype.apply.bind($.when);
Ahora podemos ir como
when(null, promiseArray).done(...)
Esto funciona, pero también quiero para deshacerse de la necesidad de pasar de forma explícita todos los null
hora. Así que traté
var when = Function.prototype.apply.bind($.when.call.bind(null));
pero que arroja a mí:
"TypeError: Function.prototype.apply called on incompatible null"
supongo que estoy sentado sobre esto durante demasiado tiempo y no puedo pensar con claridad más. Parece que hay una solución fácil. No quiero usar ninguna función adicional para resolver este problema, preferiría una solución usando .bind()
.
Véase un ejemplo completo aquí: http://jsfiddle.net/pp26L/
'.bind ($ .cuando, null)'? – Raynos
@Raynos: yay, frota la sal en mi ego herido ..: p – jAndy