簡體   English   中英

V8 中的 Javascript 等價物?

[英]Javascript equivalents in V8?

我正在嘗試使用 NodeJS 和 V8 來學習兩者。

我想用 C++ 翻譯這個簡單的 JS 行。

global.Game = { sleep: call_some_CPP_function }; 

在過去的兩天里,我一直在拼湊在互聯網上和其他人的源代碼中找到的代碼,試圖了解它是如何工作的,但我最終沒有得到太多。

下面的代碼不起作用,如果我執行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);
    }

}

游戲.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)

應用程序.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

我認為睡眠是一個很好的功能,因為它可以在其他基於 JS 的平台上運行。

function sleep(milliseconds) {
  const date = Date.now();
  let currentDate = null;
  do {
    currentDate = Date.now();
  } while (currentDate - date < milliseconds);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM