js调用java_如何从JavaScript调用Java实例的方法?

本文详细介绍了如何从JavaScript调用Java的实例方法,特别是在Rhino环境中。通过创建自定义的FunctionObject子类并重写call()方法,可以解决Java this值与JavaScript this值不匹配的问题,从而实现直接调用Java实例方法。文中提供了一个自包含的示例,演示了如何将Java实例方法暴露给JavaScript作为全局函数。
摘要由CSDN通过智能技术生成

小编典典

当要在范围内将java方法(静态或非静态)用作全局函数时,我们使用以下逻辑:

FunctionObject javascriptFunction = new FunctionObject(/* String*/ javascriptFunctionName, /* Method */ javaMethod, /*Scriptable */ parentScope);

boundScope.put(javascriptFunctionName, boundScope, javascriptFunction);

在这里,boundScope应该始终是要提供该功能的范围。

但是,父作用域的值取决于我们是绑定实例方法还是静态方法。对于静态方法,可以是任何有意义的范围。甚至可以与相同boundScope。

但是在使用实例方法的情况下,parentScope应该是绑定了方法的实例。

以上只是背景信息。现在,我将说明问题所在,并给出一个自然的解决方案,即允许直接将实例方法作为全局函数调用,而不是显式创建对象的实例,然后使用该实例调用方法的解决方案。

调用函数时,Rhino将调用FunctionObject.call()传递给的引用的方法this。如果函数是全局函数,则在不引用this(即xxx()代替this.xxx())的情况下调用该函数,this传递给该FunctionObject.call()方法的变量的值就是进行调用的范围(即,在这种情况下,this参数将与参数的值相同scope)。

如果被调用的java方法是一个实例方法,这将成为一个问题,因为根据FunctionObject类的构造函数的JavaDocs :

如果该方法不是静态的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值