Có thể tạo một số mã enum
trong mã C++ của addon Node.js và sau đó đưa loại này vào mã js không? Tôi thấy rằng các loại enum bản địa tồn tại trong js, nhưng không có thông tin về việc thực hiện của chúng trong động cơ v8.Các kiểu liệt kê trong addon gốc của Node.js
5
A
Trả lời
3
Không có loại enum cụ thể trong javascript, thay vì sử dụng int không đổi cho điều đó, chẳng hạn như trong web, thuộc tính UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONE
của XMLHttpRequest
được định nghĩa là loại enum trong C++. Để xuất những tài sản trong v8 cho javascript, sử dụng như:
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
Lưu ý rằng trong ví dụ do Kevin bạn cần phải tạo một thể hiện của Local<Object>
trước khi sử dụng nó để chắc chắn rằng bạn gọi 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
này đã thay đổi bây giờ theo mới nhất 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
);
Dường như không có cách nào cho enums hợp pháp cho addon Node.js. Trong nhóm Node.js của Google, tôi nhận được câu trả lời sau cho câu hỏi: "Không có gì bạn có thể làm về điều đó. Xuất chúng [tham số] dưới dạng số nguyên và kiểm tra các đầu vào trong vùng C++". – Ivan