V8中的Javascript等价物?

我正在玩NodeJS和V8,试图学习。

我想在C ++中翻译这个简单的JS行。

global.Game = { sleep: call_some_CPP_function }; 

在过去的两天里,我一直在拼凑在互联网和其他人的源代码中find的代码,试图了解它是如何工作的,除了我没有得到太多的结果。

下面的代码不起作用,如果我做一个console.log(global.Game) ,我什么也得不到。

 #include "node.h" #include "v8.h" namespace node{ using namespace v8; // make life easier // define a sleepy thread blocker Handle<Value> call_some_CPP_function(const FunctionCallbackInfo<Value>& a){ HandleScope scope(node_isolate); Sleep(3); return scope.Close(Undefined()); } // let's create the object here // I'm calling this function elsewhere void execme(){ // I've read somewhere that I have to do this Locker locker(node_isolate); HandleScope scope(node_isolate); // I think these two set the execution context (variables) and "this" accordingly // but I'm not sure Local<Context> context = node_isolate->GetCurrentContext(); Context::Scope context_scope(context); // I need a reference to the global object, to assign my "Game" object Local<Object> global = node_env->context()->Global(); // The only way is to invent a constructor for it Local<FunctionTemplate> function_template = FunctionTemplate::New(); function_template->SetClassName(String::New("GameClass")); // and create a new instance using that constructor Local<Object> game_object = function_template->GetFunction()->NewInstance(); // after that, add the "sleep" function, which executes the function above NODE_SET_METHOD(game_object, "sleep", call_some_CPP_function); // and finally do the global.Game assignment global->Set(String::New("Game"), game_object); } } 

game.cc

 #include <node.h> #include <v8.h> using namespace v8; // sleep 3 seconds Handle<Value> Sleep(const Arguments& args) { HandleScope scope; Sleep(3000); return scope.Close(Undefined()); } void init(Handle<Object> exports) { exports->Set(String::NewSymbol("sleep"), FunctionTemplate::New(Sleep)->GetFunction()); } NODE_MODULE(game, init) 

app.js

 global.Game = require('./build/Release/game'); console.log(global.Game); // this will print "{ sleep: [Function] }" //now you can call native sleep Game.sleep(); 

文档: http : //nodejs.org/api/addons.html#addons_hello_world