你可以這樣來做:
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