Usted puede hacerlo de esta manera:
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
Si estás en una situación sin llamada, también se puede ir por esta solución:
arr.push = function(data) {
alert(data); //callback
//While unlikely, someone may be using psh to store something important
//So we save it.
var saved = this.psh;
this.psh = Array.prototype.push;
var ret = this.psh(data);
this.psh = saved;
return ret;
}
Editar:
Mientras te estoy diciendo cómo hacerlo, es posible que te sirva mejor si usas un método diferente que realiza la devolución de llamada y solo llama a pu sh en la matriz en lugar de presionar sobre todo. Puede terminar con algunos efectos secundarios inesperados. Por ejemplo, push parece ser varadica (toma una cantidad variable de argumentos, como printf), y usar lo anterior lo rompería.
Tendría que hacer un lío con _Arguments() y _ArgumentsLength() para anular correctamente esta función. Sugiero altamente en contra de esta ruta.
Editar una vez más: O podría usar "argumentos", eso funcionaría también. Sin embargo, desaconsejamos tomar esta ruta.
Mi forma preferida de envoltura de funciones es pasar Array.prototype.push cuando ejecuta su función externa y aceptarla en la función como la variable original. Es un poco más conciso – pottedmeat
@pottedmeat: pero es menos legible. Recuerde, los programas no solo están escritos para la máquina, ¡sino también para otros programadores! – Christoph
@some ¡Muchas gracias por una explicación clara del prototipo y no! – Dorjan