Bạn có thể làm theo cách này:
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
Nếu bạn đang ở trong một tình huống mà không cần gọi, bạn cũng có thể đi cho giải pháp này:
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;
}
Edit:
Trong khi tôi đang nói cho bạn cách làm điều đó, bạn có thể được phục vụ tốt hơn bằng cách sử dụng một phương pháp khác thực hiện gọi lại sau đó chỉ cần gọi pu sh trên mảng chứ không phải là ghi đè. Bạn có thể kết thúc với một số tác dụng phụ không mong muốn. Ví dụ, push dường như là varadic (có một số biến đối số, như printf), và sử dụng ở trên sẽ phá vỡ điều đó.
Bạn sẽ cần phải làm lộn xộn với _Arguments() và _ArgumentsLength() để ghi đè chính xác chức năng này. Tôi rất khuyên bạn nên chống lại con đường này.
Chỉnh sửa một lần nữa: Hoặc bạn có thể sử dụng "đối số", điều đó cũng sẽ hoạt động. Tuy nhiên, vẫn khuyên bạn nên tham gia tuyến đường này.
Hình thức gói chức năng yêu thích của tôi là vượt qua Array.prototype.push khi bạn thực hiện hàm bên ngoài của mình và chấp nhận nó trong hàm làm biến ban đầu. Đó là một chút ngắn gọn hơn – pottedmeat
@pottedmeat: nhưng nó ít có thể đọc được - hãy nhớ rằng, các chương trình không chỉ được viết cho máy, mà còn cho các lập trình viên khác nữa! – Christoph
@some Cảm ơn bạn rất nhiều vì đã giải thích rõ nguyên mẫu và không! – Dorjan