私はいくつかの JavaScript プロファイリング ビットを書いており、クロージャー内のメソッドをインターセプトできるようにする必要があります。
私はこれを機能させることができました:
var t = (function() {
var echo = function(v) { console.log("calling echo with " + v); };
return {
intercept: function(n, f) {
var old = eval(n);
var newFunction = (function(that, old){
return f(that, old);
})(this, old);
eval(n + " = newFunction ");
},
getEchoFunction: function() { return echo; }
};
})();
var c = t.getEchoFunction();
c("hello");
t.intercept("echo", function(that,old){
return function() {
console.log("before echo");
old.apply(that,arguments);
console.log("after echo");
};
});
c = t.getEchoFunction();
c("world");
出力は次のとおりです。
「hello で echo を呼び出す」 「反響前」 "calling echo with world" 「アフターエコー」
したがって、この「インターセプト」API を使用すると、クロージャーに隠されている関数宣言をインターセプトして書き直すことができます。
しかし、世の中には eval に対する不満がたくさんあります。
eval
関数で使用する必要なく同じ API を作成する方法はありintercept
ますか?