V8中的Javascript等效项?

西尔维·玛丽安

我正在尝试使用NodeJS和V8来学习两者。

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

global.Game = { sleep: call_some_CPP_function }; 

在过去的两天里,我一直将Internet和其他人的源代码中的代码拼凑在一起,试图了解它的工作原理,除非最终我没有太多。

下面的代码不起作用,如果执行a 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

V8中的Javascript奇怪的性能

来自分类Dev

V8中的JavaScript编译

来自分类Dev

节点或v8中内置JavaScript类型的参考

来自分类Dev

如何在C ++中从V8调用Javascript函数

来自分类Dev

节点或v8中内置JavaScript类型的参考

来自分类Dev

V8中JavaScript对象的内存布局

来自分类Dev

在V8上进行JavaScript测试

来自分类Dev

可以在Chrome中的JavaScript中获取V8 JavaScript引擎版本号

来自分类Dev

JavaScript中的C#字典等效项

来自分类Dev

V8中的隐藏课程

来自分类Dev

V8中的Typeof和Expression *

来自分类Dev

在V8中使用TerminateExecution

来自分类Dev

在v8中检测无限递归

来自分类Dev

Windows中的V8构建错误

来自分类Dev

V8 Javascript引擎:v8 ::参数和功能模板

来自分类Dev

在V8 JavaScript引擎中,如何使每个实例重新使用ObjectTemplate的构造函数?

来自分类Dev

在嵌入式V8引擎中调试JavaScript

来自分类Dev

客户端上的JavaScript中的哈希计算(Chrome / V8)

来自分类Dev

如何删除 Bing Maps V8 Javascript API 中的军械测量选项?

来自分类Dev

Windows 8中的PhoneApplicationService.Current.State等效项

来自分类Dev

javascript V8优化和“泄漏参数”

来自分类Dev

V8 JavaScript如何进行异步调用

来自分类Dev

V8 JavaScript对象与二叉树

来自分类Dev

Javascript v8引擎和Web API

来自分类Dev

Javascript V8复合错误堆栈格式

来自分类Dev

javascript / node.js中的seek()等效项?

来自分类Dev

javascript中isset($ _ POST ['name'])的等效项是什么?

来自分类Dev

javascript unittests jest库中是否有assertCountEqual等效项?

来自分类Dev

缩短了if语句及其在JavaScript中的直接等效项