2013-03-26 14 views
5

È possibile creare un po 'di enum in codice C++ di addon Node.js e quindi esporre questo tipo al codice js? Ho trovato che i tipi di enum nativo esistono in js, ma non ci sono informazioni sulla loro implementazione nel motore v8.Tipi di enumerazione nel componente aggiuntivo Node.js

+1

Sembra che non c'è modo per le enumerazioni legittimi per addon node.js. Nel gruppo Google Node.js ho ottenuto la seguente risposta alla domanda: "Nulla di ciò che puoi fare è esportarli [parametri] come numeri interi e controllare gli input in C++ land". – Ivan

risposta

3

Non vi sono particolari tipi enum in JavaScript, anziché utilizzare int costante che, come nel web, proprietà UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONE di XMLHttpRequest sono definiti come tipo enum in C++. Per esportare queste proprietà in v8 per javascript, utilizzare come:

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. 
4

Si noti che nell'esempio data dal Kevin è necessario creare un'istanza di Local<Object> prima di utilizzarlo in modo da assicurarsi di chiamare 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. 
1

questo è ora è cambiato secondo le ultime 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 
         ); 
Problemi correlati