当前位置: 首页 > 知识库问答 >
问题:

向GraalVM JavaScript引擎添加全局函数/变量

令狐献
2023-03-14

如何在不使用Nashorn兼容性模式的情况下,通过Object.bindProperties()方法向GraalVM的JavaScript“this”对象添加自定义全局函数(请参阅:定义Nashorn脚本引擎的默认/全局Java对象?)?我找不到使用Context方法的方法,Context对象的反射不显示我可以使用的类似bindProperties()方法。

例子:

我有以下方法:

class GlobalMethods
{
public void a() {...}
public void b() {...}
public void c() {...}
}

我希望a(),b()和c()可以在JavaScript中调用,没有范围/限制:

context.eval("js", "a()");

提前谢谢!

共有1个答案

许焕
2023-03-14

您可以定义一个文件,比如globals.js,其中全局对象被初始化并添加到JavaScript全局对象:

globalThis.someFunction = function() {...}

并设置选项js。commonjs全局属性要在创建上下文时加载此文件:

java prettyprint-override">Context context = Context.newBuilder("js")
                         .option("js.commonjs-global-properties", "./globals.js")
                         .build();
 类似资料:
  • 问题内容: 我知道我应该避免由于这样的混乱而首先使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独函数中创建的变量的全局副本。) 第二个函数使用的是否具有与使用和修改的的全局副本相同的值?定义后调用函数时,顺序重要吗? 问题答案: 如果你只想访问全局变量,则只需使用其名称即可。但是,要更改其值,你需要使用global关键字。 例如 这会将全局变量的值更改为55。

  • 我知道由于这样的混淆,我应该首先避免使用全局变量,但是如果我要使用它们,以下是使用它们的有效方法吗?(我正在尝试调用在单独的函数中创建的变量的全局副本。) 第二个函数使用的是否与使用和修改的的全局副本具有相同的值?定义后调用函数时,顺序重要吗?

  • 本文向大家介绍vue 如何添加全局函数或全局变量以及单页面的title设置总结,包括了vue 如何添加全局函数或全局变量以及单页面的title设置总结的使用技巧和注意事项,需要的朋友参考一下 传统的设置title的方法是:document.title = ‘title' 但是这种写法在iOS的微信上是不兼容的 这里设置title的方法是通过在百度搜索的所谓黑科技,避免了安卓和iOS的不兼容写法 首

  • 问题内容: 该文件说: Swift编译器会自动将C和Objective-C源文件中定义的全局常量作为Swift全局常量导入。 但这并没有说相反的话。我需要定义一个全局swift常数,并且能够像全局c常数一样客观地看到它。如快速定义: 并在物镜c端使用它,例如 我该怎么办?我已经导入了迅速自动生成的标题,例如: 在Xcode中,如果我使用它,它将带我到swift代码中的正确位置,但是在编译时,我得到

  • 本文向大家介绍Yii2中添加全局函数的方法分析,包括了Yii2中添加全局函数的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii2中添加全局函数的方法。分享给大家供大家参考,具体如下: 方法一 这种方法就是直接在入口文件web/index.php里面写函数,示例代码如下: 这个方法虽然可以实现,但是本人不推荐,因为改了框架本身的代码,而且如果全局函数多了的话,也不好管理。 方法

  • 问题内容: 通过在两者之间使用mysql_query和mysql_fetch_array命令调用下面的函数,连接和关闭数据库是否有任何问题 目前,我收到一个错误消息,说L1的$ connection必须是一种资源,但它是BOOL。如果我在此处给出一条死亡声明,则会触发同样的情况。我不知道怎么了。请找出所有可能的错误。我不得不从编码中休假,过了一会儿我又回来了。 感谢和问候 问题答案: 在 分配变量