gpt4 book ai didi

javascript - 在 JSObject、AbstractJSObject 中重写 hasMember() 有什么用?

转载 作者:行者123 更新时间:2023-12-01 03:00:20 25 4
gpt4 key购买 nike

据我了解,可以从 Java 代码调用此帮助器方法来检查您的 Java/JS 对象是否具有您正在查找的属性但是我想知道当我们在 JavaScript 代码中使用这个 JSObject/AbstractJSObject 实现时,Nashorn 引擎是否会调用它。

我知道做一个 . JavaScript 内部将依次调用 Java 方法 .getMember()

最佳答案

如果在 JSObject 实例上的 JavaScript ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in ) 中使用“in”运算符,Nashorn 将调用该 JSObject 上的 hasMember 方法。

示例代码:

import javax.script.*;
import jdk.nashorn.api.scripting.*;

public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine e = m.getEngineByName("nashorn");
e.put("obj", new AbstractJSObject() {
@Override
public boolean hasMember(String name) {
System.out.println("hasMember called for " + name);
return false;
}
});
// in operator triggers hasMember call on JSObject instance
e.eval("if ('foo' in obj) print('yes')");
}
}

上述程序的输出如下所示:

hasMember called for foo

关于javascript - 在 JSObject、AbstractJSObject 中重写 hasMember() 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46461346/

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