在此代碼中,我創建了一個名爲someFunction的函數。然後我修改了Function.prototype.apply並調用方法。所以,而不是我的功能代碼正在工作我正在運行我的攔截代碼(顯示警報)。但是「呼叫」和「應用」都不會攔截直接方法調用。攔截這個是否正確?我可以攔截直接調用的函數嗎?
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?
}
也許我可以改變Function.constructor功能,所以每一個返回的函數將圍繞它的包裝。 – yilmazhuseyin 2010-08-04 14:36:32
@yilmazhuseyin:不,你不能。更改* Function *構造函數只會允許您覆蓋使用'new Function(str)'創建的函數。 – 2010-08-04 14:49:03
是的你是對的。函數newConstructor(){alert(「a」);}; Function.prototype.constructor = newConstructor; 沒有工作。 – yilmazhuseyin 2010-08-04 14:56:41