Java Nashorn: JS中的抽象类,依赖于JS函数
Java Nashorn: Abstract Class in JS falling back on JS function?
我在JS中创建一个类,然后需要能够从原始JS访问函数。但在我的选项中,这有点棘手,因为函数名称只是"button_A_NUMBER",范围从0到500以上。我刚开始使用JavaScript,过去在网页上进行简单的更改,所以我不确定我是否完全离开这里。
我使用这个["button_" + interfaceID](),它工作得很好,直到我把它改成一个类而不是一个函数。
JS文件
function DecodedPacketButton(index) {
var classObject = new DecodedPacket(index, 8, this) {
complete: function(player, args) {
try {
var interfaceID = args[0];
var childID = args[1];
var slot1 = args[2];
var slot2 = args[3];
classObject.callMember("button_" + interfaceID, player,
classObject.index(), interfaceID, childID, slot1, slot2);
} catch (e) {
Logger.error(e);
}
}
};
return classObject;
}
function DecodedPacket121() {
return DecodedPacketButton(0);
}
JS文件
DecodedPacketButton.prototype.button_182
= function(player, index, interfaceID, childID, slot1, slot2) { }
Java类
import jdk.nashorn.api.scripting.ScriptObjectMirror;
public abstract class DecodedPacket {
private int index;
private int size;
private ScriptObjectMirror mirror;
public DecodedPacket(int index, int size, ScriptObjectMirror mirror) {
this.index = index;
this.size = size;
this.mirror = mirror;
}
public abstract void complete(Player p, Object... args);
public void callMember(String functionName, Object... args) {
mirror.callMember(functionName, args);
}
public void call(String functionName, Object... args) {
mirror.call(functionName, args);
}
}
我认为call或callMember将是我正在寻找的,但似乎都没有做到这一点。
如果要按名称调用函数,最简单的方法是将它们放在对象文字中。
var funcs = {
func1: function () { console.log('this is function 1') },
func2: function () { console.log('this is function 2') }
};
function callFunc(name) {
if (funcs[name]) funcs[name]();
else console.log('Function ' + name + ' not found.');
}
callFunc('func1');
callFunc('func2');
callFunc('func3');
通过简单地将DecodedPacketButton作为新的DecodedPacketButton返回,我能够使我的原始代码按原样工作。如果有人能给我解释一下new的必要性以及使用和不使用的区别,我将不胜感激。
相关文章:
- Node.js中依赖于版本的类型继承
- Sails.js日志传输依赖于环境
- 在js中使用节俭而不依赖于节俭RPC
- 如何使 MathJax 的源代码(路径.js环境依赖于
- 如何在维护DRY代码的同时运行依赖于js事件的coffeescript方法
- Rivets.js属性依赖于几个字段
- require.js模块是否可以依赖于它自己
- 如何同步声明JS对象,然后用依赖于并发操作的数据编辑对象的属性
- 加载依赖于页面的面向对象JS属性的最好方法是什么?
- d3.js中单个节点中的复杂符号,其中符号依赖于数据
- 依赖于Backbone.js模型的属性
- Java Nashorn: JS中的抽象类,依赖于JS函数
- 将常见的js代码移到依赖于闭包的函数中
- 如何使用RquireJS加载一个定义了全局变量并依赖于另一个第三方库的JS库
- 使用JS显示依赖于元素类的图像
- Requirejs -将多个文件合并为一个不依赖于Requirejs的js文件
- Angular JS——添加依赖于彼此的库
- 如何激发依赖于2个(或多个)条件的JS事件
- React Native-使用依赖于node.js核心模块的Javascript模块
- node.js事件发射器创建多个对象或依赖于参数