javascript alert() ネイティブ コールをインターセプトし、実際の実行前にユーザー コードをフックできることがわかりました。サンプルコードをチェックしてください..
function Test(){
var alertHook=function(aa){
this.alert(aa);
}
this.alert("aa");
this.alert = alertHook;
alert("aa");
}
したがって、alert("aa") を呼び出すたびに、alertHook ローカル関数によってインターセプトされます。しかし、小さな変更を加えた以下の実装は機能しません。
function Test(){
var alertHook=function(aa){
alert(aa);
}
alert("aa");
alert = alertHook; //throws Microsoft JScript runtime error: Object doesn't support this action
alert("aa");
}
Microsoft JScript runtime error: Object does not support this action がスローされます。
この.alert = alertHook;がどうなるかわかりません。通話を傍受させてください。ただし、alert=alertHook; いいえ。??
したがって、これを使用してネイティブ js メソッドをインターセプトすると仮定します。そうですか?
そして、それは受け入れられますか?このようにして、ネイティブJS呼び出しを独自のメソッドに完全に置き換えることができるから??
アップデート:
私は尋ねました、それは受け入れられますか?これは、eval() を使用してユーザーがネイティブ関数呼び出しを置き換えることができる優れたアプローチであるためです。
そして、開発者を誤解を招く機能から保護するという言語の責任、ウィンドウ レベル (または共通のフレームワーク js ファイル) でネイティブ js 呼び出しを置き換えると、システム全体がクラッシュします..そうではありませんか??
この機能の背後にある理由を理解していないため、私の意見が間違っている可能性があります..? 開発者が独自の実装を置き換えることができる言語を見たことがありません..