Gibt es eine einfache Möglichkeit zu verhindern, $ bind Generation bei der Weitergabe von Klassenmember Funktionen?
Ich habe ein Objekt, das eine Funktion aufnimmt, die in einem beliebigen Intervall aufgerufen wird. Das Objekt bindet sich immer selbst als "diese" Bindung, bevor es die Funktion aufruft (dies geschieht auf der nativen Seite), daher ist der Aufruf an $ bind selbst unnötig. Allerdings kann ich keinen einfachen Weg finden zu verhindern, dass $ bind jedes Mal ausgegeben wird, wenn ich eine Elementfunktion nach Wert nehme.
Die einzige Möglichkeit, die ich gefunden habe, ist die Verwendung __js__ mit einem String-Literal der Mitgliedsfunktion Name, die ich lieber vermeiden würde ... Gibt es eine getippte Möglichkeit, dies zu tun? Oder etwas ein bisschen schöner? Eine Möglichkeit, immer noch die Syntax von haxe mit Bezeichnern anstelle eines String-Literals zu verwenden?
Beispiel:
private function onSpawn():Void
{
this.setAct(act); // Will generate JS: this.setAct($bind(this,this.act));
// Id like to simply have it generate: this.setAct(this.act);
// Mitigated like this:
this.setAct(untyped __js__("this.act"));
}
private function act(dt:Float):Void
{
...
}
Danke.
Nicht sicher, ob es eine Methode gibt, außer den Generator (ocaml) zu modifizieren. Was genau ist das Problem mit $ bind? – KevinResoL
$ bind fügt einen weiteren unnötigen Funktionsaufruf hinzu, wo er nicht benötigt wird. Ich benutze Javascript-Interpreter und diese Funktionen werden jedes Bild für viele Objekte genannt, was einen unnötigen Leistungseinbruch bedeutet. (Siehe https://github.com/svaarala/duktape/issues/1300#issuecomment-273003473). Nicht nur das, sondern auch $ bind fügt jedes Mal, wenn es aufgerufen wird, 3 Eigenschaften-Lookups hinzu, was ebenfalls langsam ist: ** f.method.apply (fscope, ..) ** –