2013-03-26 11 views
5

Czy jest możliwe utworzenie kodu w kodzie C++ dodatku Node.js, a następnie udostępnienie tego kodu js? Odkryłem, że natywne typy enum istnieją w js, ale nie ma informacji o ich implementacji w silniku v8.Typy wyliczeń w node.js natywnym addonie

+1

Wydaje się, że nie ma mowy o uzasadnionych teksty stałe dla node.js dodatku. W grupie Node.js Google otrzymałem następującą odpowiedź na pytanie: "Nic nie możesz zrobić, wyeksportuj je [parametry] jako liczby całkowite i sprawdź dane wejściowe w obszarze C++." – Ivan

Odpowiedz

3

Nie ma specyficznych typów wyliczeń w javascript, zamiast tego użyj stałej int, na przykład w sieci, właściwości UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONE z XMLHttpRequest są zdefiniowane jako typ enum w C++. Aby wyeksportować te właściwości w v8 dla javascript, należy jak:

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

zauważyć, że w przykładzie podanym przez Kevin trzeba utworzyć instancję Local<Object> przed użyciem go więc upewnij się, zadzwoń 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

to się zmieniło teraz według najnowocześniejszych 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 
         );