2013-03-26 39 views
5

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

+1

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

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 
         ); 
Các vấn đề liên quan