Bạn có thể chiếm quyền điều khiển các chức năng JavaScript theo cách sau đây:
(function(){
var oldLog = console.log;
console.log = function (message) {
// DO MESSAGE HERE.
oldLog.apply(console, arguments);
};
})();
- Dòng 1 kết thúc tốt chức năng của bạn khi đóng nên không có chức năng nào khác có quyền truy cập trực tiếp vào
oldLog
(vì lý do bảo trì).
- Dòng 2 chụp phương thức gốc.
- Dòng 3 tạo chức năng mới.
- Dòng 4 là nơi bạn gửi
message
tới máy chủ của mình.
- Dòng 5 gọi phương thức ban đầu vì nó đã được xử lý ban đầu.
apply
được sử dụng vì vậy chúng tôi có thể gọi nó trênconsole
sử dụng những lập luận ban đầu. Chỉ cần gọi oldLog(message)
sẽ không thành công vì log
phụ thuộc vào sự liên kết của nó với console
.
Cập nhật mỗi zzzzBov của bình luận dưới đây, trong IE9 console.log
không phải là thực sự là một chức năng rất oldLog.apply
sẽ thất bại. Xem console.log.apply not working in IE9 để biết thêm chi tiết.
Nguồn
2012-07-09 21:05:38
[Mã của bạn sẽ gặp sự cố trong IE vì 'console.log' không thực sự là một cá thể' Hàm' trong IE] (http://stackoverflow.com/questions/5538972/console-log-apply-not-working- in-ie9). – zzzzBov
@zzzzBov Thú vị. Tôi giả định gán 'console._oldLog = console.log; console._oldLog (message); 'sẽ hoạt động, nhưng nếu' console' chính nó là một đối tượng được lưu trữ, không có thay đổi nào được đảm bảo. Thật không may, tôi không có IE để kiểm tra điều này nữa. –
yea, bạn vẫn có thể gọi '_oldLog' như thế. 'oldLog = Function.prototype.bind.call (console.log, console)' hoạt động cho IE9 +, nhưng sau đó cần một polyfill cho 'Function.prototype.bind' cho IE8 và dưới đây. – zzzzBov