gpt4 book ai didi

javascript - 你能在没有 eval 的情况下拦截闭包中的局部变量吗?

转载 作者:行者123 更新时间:2023-11-29 20:03:06 24 4
gpt4 key购买 nike

我正在编写一些 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");

输出是:

"calling echo with hello""before echo""calling echo with world""after echo"

因此,这个“拦截”API 让我可以拦截并重写隐藏在闭包中的函数声明。

然而,世界上对 eval 的提示很多。

有什么方法可以编写相同的 API 而无需在 intercept 函数中使用 eval 吗?

最佳答案

不,遗憾的是,无法访问类似于 window[...] 工作方式的非全局范围。

但是,根据您需要执行的操作,使用对象而不是 native 范围是个好主意。

关于javascript - 你能在没有 eval 的情况下拦截闭包中的局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com