たとえば、いくつかの単純な C++ クラスがあります。
class Audio {
public:
Audio(const char *filename, bool async = true);
~Audio();
Audio *play(int fade = 0);
Audio *pause();
Audio *loop(int loops = -1);
Audio *volume(float volume);
次のように JavaScript で構造を複製しました。
var Audio = function(filename, async) {};
Audio.prototype.Play = function(fade) {};
Audio.prototype.Pause = function() {};
Audio.prototype.Loop = function(loops) {};
Audio.prototype.Volume = function(volume) {};
そして、v8、v8-juice、および多数のブログのドキュメントとソースの両方を読んだ後... C++メソッドでJS関数を「オーバーライド」する方法に関する単一の参照が見つかりません。
理想的には、JS がクラスの作成/破棄を制御し (これは可能ですか?)、それらのオブジェクトが常にネイティブ関数 (PrototypeTemplate?) を指すようにしたいと考えています。
私は今日、これに関連する記事/ブログ/コードを読むことに真剣に一日を費やしましたが、簡単な答えが見つからないことを願っています。
あなたのために、私への「簡単な」答えは次のようなものです(ラッパーは私には問題ありません。作成/破壊のためにラッパーを書かなければならない場合は問題ありません):
v8::Local<v8::Function> jsAudioFunction = v8::Local<v8::Function>::Cast(v8::Context::GetCurrent()->Global()->Get(v8::String::New("Audio")));
jsAudioFunction->Setup(/* setup constructor/destructor */);
jsAudioFunction->SetPrototype(/* map native methods to js functions */);