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