Я создаю класс в JS, который затем должен иметь возможность доступа к функциям из оригинальной JS. Это немного сложнее в моих опциях, потому что имена функций - это только «button_A_NUMBER», которые могут варьироваться от 0 до более 500. Я новичок в использовании JavaScript, простыми изменениями здесь и там на веб-странице, поэтому я не конечно, если я полностью здесь.Java Nashorn: абстрактный класс в JS, отступающем от функции JS?
Я использовал этот ["button_" + interfaceID](), который работал отлично, пока я не изменил его как класс вместо функции.
JS Файл 1
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 Файл 2
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);
}
}
Я думал, что вызов или callMember будет тем, что я ищу, но, похоже, это не трюк.
Итак, вы пытаетесь вызвать функцию, основанную на номере в их имени? НЕ ДЕЛАЙТЕ ЭТО. Если вам действительно нужно получить доступ к функциям по индексу, поместите их в список и индексируйте и вызовите из списка. – Carcigenicate