2017-09-15 2 views
0

私はこれらの種類の呼び出しのディスパッチャとして単一のduktape/Cコンストラクタ関数を使用したいと思います。ディスパッチャー関数が呼び出されるとき、私はこのクラスが適切なC++構築関数を呼び出すのにどのクラスが必要かを知る必要があります。duktapeでコンストラクタ関数を実行しているときにクラス名を取得する方法は?

私がここで作成している(まだ完全に初期化されていない)JSオブジェクトを表すので、thisバインディングは役に立たないと思います。

もう1つのオプションは現在の関数ですが、ドキュメントからはクラス名を取得する方法がわかりません。他に何が使えますか?

答えて

0

"クラス名"の意味を詳しく説明できますか?あなたは '新しい'ターゲットとして使用されるEcmascript関数オブジェクトの.nameプロパティを意味しますか?

を使用して、現在の呼び出しがコンストラクタ呼び出しであるかどうかを確認し、duk_push_current_function()を使用してEcmascriptコンストラクタ関数オブジェクトにアクセスし、通常のプロパティAPI呼び出しを使用してプロパティを読み取ることができます。たとえば、 "class name"によって関数オブジェクトの.nameを意味する場合、duk_get_prop_string()を使用して "name"プロパティを読み取るだけです。

+0

私はこのようなプロパティがあるとは確信が持てませんでしたが、残念ながら、私は現在何かに焦点を当てていますので、私はこれを試していませんでした。しかし、あなたの提案は合理的に聞こえる。 –

+0

duk_push_c_function()で作成された関数オブジェクトには自動的に 'name'プロパティがありませんが、手動で設定することができます(この場合はそうする必要があります)。 Ecmascriptコードから 'function foo(){...}'として作成された関数オブジェクトは自動的に '.name'プロパティを持ちます。 –

+0

はい、これが結論です。ありがとうございます。 –

関連する問題