Trong đoạn mã này, tôi đã tạo ra một hàm gọi là someFunction. Sau đó, tôi đã sửa đổi Function.prototype.apply và các phương thức gọi. Vì vậy, thay vì mã chức năng của tôi đang làm việc tôi đang chạy mã chặn của tôi (trong đó cho thấy một cảnh báo). Nhưng không phải "gọi" hay "áp dụng" đều chặn cuộc gọi phương thức trực tiếp. Liệu nó có thể đánh chặn điều này?Tôi có thể chặn một hàm được gọi trực tiếp không?
Function.prototype.call = function(){alert("call");};
Function.prototype.apply = function(){alert("apply");};
function someFunction(){}
window.onload = function(){
someFunction.call(this); //call alert is shown
someFunction.apply(this); //apply alert is shown
someFunction(); //how can I intercept this?
}
Có lẽ tôi có thể thay đổi Function.constructor chức năng như vậy mỗi chức năng quay trở lại sẽ có wrapper của bạn xung quanh nó. – yilmazhuseyin
@yilmazhuseyin: không, bạn không thể. Việc thay đổi hàm tạo * Function * sẽ chỉ cho phép bạn ghi đè các hàm được tạo bằng 'hàm mới (str)'. –
có bạn đã đúng. function newConstructor() {alert ("a");}; Function.prototype.constructor = newConstructor; không hoạt động. – yilmazhuseyin