簡単な方法はありますか?$ bindは、クラスメンバー関数を渡すときに生成されますか?
私は、任意の間隔で呼び出される関数をとるオブジェクトを持っています。関数は(これはネイティブ側で行われます)関数を呼び出す前にオブジェクトを常に 'this'バインディングとしてバインドします。したがって、$ bindへの呼び出し自体は不要です。しかし、私は単純な方法を見つけることができないようです$ bind私は値でメンバー関数を取得するたびに放出されることから。
私が見つけた唯一の方法は、__js__に、メンバ関数名の文字列リテラルを使用することです。これは、むしろ避けるでしょう。型付きの方法がありますか?それとももう少し良いものがありますか?文字列リテラルの代わりにhaxe構文w/identifierを使用する方法?
例:
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
{
...
}
ありがとうございました。
ジェネレータ(ocaml)の変更以外の方法があるかどうかは不明です。 $ bindを使用した場合の正確な問題は何ですか? – KevinResoL
$ bindは不要な関数呼び出しを追加します。私はJavaScriptインタープリタを使用しています。これらの関数は多くのオブジェクトのすべてのフレームと呼ばれ、不必要なパフォーマンスが低下します。 (https://github.com/svaarala/duktape/issues/1300#issuecomment-273003473を参照)。それだけでなく、$ bindはそれが呼び出されるたびに3つのプロパティールックアップも追加します。** f.method.apply(f.scope、..)** –