Llamar a múltiples funciones desde jQuery .on ("change" … event)

Quiero llamar a dos funciones cuando myValue cambia, y mientras esto funciona bien:

this.myValue.on("change", $.proxy(self.functionOne, self)); this.myValue.on("change", $.proxy(self.functionTwo, self)); 

ninguna function se llama en este caso:

 this.myValue.on("change", function () { $.proxy(self.functionOne, self); $.proxy(self.functionTwo, self); }) 

No es un gran problema para mí si no puedo llamar a ambas funciones dentro de un evento de cambio como este en este momento, pero soy bastante nuevo en jQuery y me gustaría saber por qué.

$.proxy() llamar a las funciones definidas en $.proxy() :

 this.myValue.on("change", function () { $.proxy(self.functionOne, self)(); $.proxy(self.functionTwo, self)(); }) 

Tenga en count el final () .

El método $.proxy simplemente devolverá una function, pero no la llamará. Puedes usar:

 self.functionOne.call(self); self.functionTwo.call(self); 

La function de llamada llama a la function, y se puede pasar en el 'context', es decir. lo que se usa como 'esto' dentro de la function, al igual que en $ .proxy.

Use la apply nativa o call lugar

 this.myValue.on("change", function() { self.functionOne.apply(this, arguments); self.functionTwo.apply(this, arguments); }); 

$.proxy toma una function y devuelve una nueva que siempre tendrá un context particular, y que funciona cuando se hace reference a la function devuelta, pero no de la manera en que lo hace en la callback, ya que nunca se llama a la function devuelta.

Por supuesto, puede usar $.proxy y simplemente llamar a la function devuelta también

 this.myValue.on("change", function () { $.proxy(self.functionOne, self)(); $.proxy(self.functionTwo, self)(); }); 

o simplemente deje que jQuery lo maneje, optimiza los events y utiliza una queue interna de todos modos

 this.myValue.on("change", self.functionOne); this.myValue.on("change", self.functionTwo); 

¿Por qué no puedes llamarlo así de simple?

 this.myValue.on("change", function () { functionOne(); functionTwo(); })