Tenía una pregunta sobre el patrón 'pato golpeando' que encontré por primera vez en el blog de Paul Irish. Tengo la premisa general ... guardar una referencia a una función existente, luego reemplazar la función existente con una rama condicional que llamará a una nueva función si se cumple la condición, o la versión anterior si no es así. Mi pregunta es por qué tenemos que usar "apply" con "this" como primer param cuando llamamos a la función _old? Entiendo cómo funciona aplicar, pero estoy buscando alguna aclaración sobre por qué es necesario.Observación del patrón Paul Irish 'pato perforación'
(function($){
// store original reference to the method
var _old = $.fn.method;
$.fn.method = function(arg1,arg2){
if (... condition ...) {
return ....
} else { // do the default
return _old.apply(this,arguments);
}
};
})(jQuery);
Entiendo eso, supongo que no entiendo qué es lo que 'aplica' con esto ya que el primer parámetro ayuda a prevenir.Si hiciéramos algo similar a lo que usted ilustró anteriormente con el código de perforación de patos, 'esto', es posible que 'esto' sea una ventana, entonces, ¿qué ayuda tiene la aplicación? – mike
hmmm - no tratando de ser obtuso y tal vez solo necesito investigar un poco más, pero aplicar en el código de perforación de pato toma ciegamente lo que sea que 'esto' esté configurado actualmente. No veo cómo es diferente a simplemente llamar a _old directamente. Tal vez eso es lo que me estoy perdiendo. Si hice una llamada directa a _old, ¿no sería 'esto' SIEMPRE el mismo 'este' que el código pasa a 'aplicar'? Entonces, cuál es el punto de usar apply – mike
Digamos que el $ .fn.method original internamente usa otros métodos jQuery que dependen de este contexto. Llamarlo con contexto global haría inutilizables los otros métodos. También muchas funciones jQuery devuelven esto para que el encadenamiento sea posible. Si devuelve el contexto incorrecto, también se interrumpirá el encadenamiento. – Rafael