你可以这样来做:
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
如果您在不通话的情况下的时候,你也可以去这个解决方案:
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;
}
编辑:
虽然我告诉你如何去做,但你可能会更好地使用不同的方法执行回调,然后调用pu在阵列上而不是推翻。你可能会出现一些意想不到的副作用。例如,push似乎是可变的(采用可变数量的参数,如printf),使用上述操作会破坏这一点。
你需要弄乱_Arguments()和_ArgumentsLength()来正确覆盖这个函数。我强烈反对这条路线。
再次编辑: 或者你可以使用“参数”,这也可以。不过建议不要采取这条路线。
我最喜欢的函数包装形式是在执行外部函数时传递Array.prototype.push,并在函数中将其作为变量原始接受。它更简洁一点 – pottedmeat 2009-02-21 10:04:00
@pottedmeat:但它的可读性较差 - 请记住,程序不仅是为机器编写的,而且也是为其他程序员编写的! – Christoph 2009-02-21 10:45:26
@some非常感谢您对原型的一个清晰的解释,而不是! – Dorjan 2012-06-01 17:07:50