Node.js原生插件中的枚举types

有没有可能创build一些enum在Node.js插件的C ++代码,然后公开这种types的JS代码? 我发现js中存在本地枚举types,但在v8引擎中没有关于它们的实现的信息。

       

网上收集的解决方案 "Node.js原生插件中的枚举types"

请注意,在由Kevin给出的例子中,你需要在使用它之前创build一个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. 

在JavaScript中没有具体的枚举types,而是使用常量int,例如在web中,属性UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONE XMLHttpRequest被定义为C ++中的枚举types。 要在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. 

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

 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 );