gpt4 book ai didi

javascript - 访问/拦截 Nashorn 的全局对象变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:26 24 4
gpt4 key购买 nike

这与题为 "Capturing Nashorn's Global Variables" 的问题相同。 .我发现它非常限制无法拦截变量分配给全局对象。

例如,假设我评估脚本“a = 10”。也许我想调用一个监听器来通知“a”已添加到作用域中。我能做到这一点的唯一方法是在评估脚本后调查全局对象。

或者说我想拦截一个分配给全局范围的对象并将其替换为另一个对象;如果它使用 Bindings,我可以实现 put,并委托(delegate)给其他一些绑定(bind):

public Object put(String name, Object value) {
//put a toStringed version of the object in scope
return delegate.put(name, value+"");
}

这样,当代码“a=10”被评估时,它会将“10”而不是 10 放入作用域中。

实现 Bindings 接口(interface)很方便,但令人沮丧的是我无法为全局对象提供类似此实现的东西。 ScriptObjectMirror 是最终的,所以我什至无法重载它并劫持对内部 ScriptObject 的后续调用。我错过了什么吗?

最佳答案

所以基本上你想要做的是拦截/捕获对某个对象的任意属性的赋值。在您的例子中,是全局对象。

Afaik,如果没有一些相当骇人听闻的代码,这真的不可能实现。搜索“observables javascript”可能会对您有所帮助,但请注意,您将进入一些困惑的领域。

如果这是为了测试(而不是生产代码),一个 setTimeout/setInterval 和一些监听器定期枚举全局对象的所有属性并记录一个如果添加了一个警告可能对您来说就足够了。

将来,我们将拥有 Javascript Proxy帮助我们解决这个问题的标准,但我严重怀疑 Nashorn 中是否存在。自从我与 Nashorn 合作以来已经有一段时间了,但是在现场最初的爆发之后,Nashorn 的前端问题一直很安静......

关于javascript - 访问/拦截 Nashorn 的全局对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046848/

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