我有几个简单的 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 */);