5

是否可以在 Node.js 插件的 C++ 代码中创建一些enum,然后将此类型公开给 js 代码?我发现 js 中存在原生枚举类型,但没有关于它们在 v8 引擎中实现的信息。

4

3 回答 3

4

请注意,在Kevin给出的示例中,您需要Local<Object>在使用它之前创建一个实例,因此请确保调用Object::New().

Local<Object> obj = Object::New();
const char* k = "HEADERS_RECEIVED";
int v = 1;
obj->Set(v8::String::NewSymbol(k), v8::Int32::New(v), ReadOnly); // Use PropertyAttribute ReadOnly so that value won't be changed by javascript.
于 2016-02-01T10:28:37.613 回答
3

javascript中没有特定的枚举类型,而是使用常量int,例如在web中,属性在C++UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONEXMLHttpRequest被定义为枚举类型。要在 v8 中为 javascript 导出这些属性,请使用如下:

Local<Object> obj;
const char* k = "HEADERS_RECEIVED";
int v = 1;
obj->Set(v8::String::NewSymbol(k), v8::Int32::New(v), ReadOnly); // Use PropertyAttribute ReadOnly so that value won't be changed by javascript.
于 2013-03-30T09:38:00.323 回答
1

根据最新的v8 API ref ,这已经改变了

Isolate* isolate = args.GetIsolate();
Local<Context> context = isolate->GetCurrentContext();
Local<Object> obj;
obj->DefineOwnProperty(
                       context,
                       String::NewFromUtf8(isolate,"enum"),
                       Number::New(isolate,1), v8::ReadOnly
                       );
于 2016-12-21T11:18:24.120 回答