是否有可能在Node.js插件的C++代码中创建一些enum
,然后将此类型公开给js代码?我发现js中存在本地枚举类型,但是在v8引擎中没有关于它们的实现的信息。Node.js native枚举中的枚举类型
5
A
回答
3
在javascript中没有具体的枚举类型,而是使用常量int,例如在web中,属性UNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONE
的XMLHttpRequest
被定义为C++中的枚举类型。为了在V8中导出这些属性的JavaScript,请使用类似:
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
注意,在通过Kevin给出的例子,你需要使用它,以便确保您拨打Object::New()
之前创建的Local<Object>
一个实例。
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
这已经根据最新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
);
相关问题
- 1. Java类枚举枚举类
- 2. 枚举抛出“不是枚举类型”
- 3. 为枚举类型
- 4. psycopg2枚举类型
- 5. 枚举或类型
- 6. 上枚举类型
- 7. HTML5枚举类型
- 8. VBScript中的枚举类型
- 9. 在枚举中枚举
- 10. C#:基于不同枚举类型的枚举值返回枚举值
- 11. 确定枚举类中的枚举数(或任何枚举类中的特定枚举值)
- 12. 枚举声明中枚举数的类型
- 13. 带枚举的MySQL枚举
- 14. 类枚举类
- 15. 如何在枚举类型仅在运行时知道枚举枚举?
- 16. 基于枚举创建枚举类别
- 17. 由枚举型
- 18. 在Node.js中声明和使用枚举的枚举
- 19. 在Postgres中将枚举类型整数转换为枚举
- 20. Java枚举找到枚举
- 21. 转换枚举来枚举
- 22. 重新枚举枚举
- 23. 类内枚举
- 24. 枚举类
- 25. 枚举C++类
- 26. 从枚举类
- 27. AutoMapping枚举类
- 28. 类C++中的枚举声明,在类中枚举的问题
- 29. 枚举转换成另一种类型的枚举
- 30. 迭代通过可枚举类型的可枚举集合
看来,也不是没有办法针对Node.js的插件合法枚举现在已经改变。在Node.js Google组中,我得到了以下问题的答案: “你可以做什么,将它们[参数]导出为整数并在C++ land中检查你的 输入。 – Ivan 2013-04-02 05:28:22