是否有可能在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. Ç枚舉(枚舉類型定義)的
- 2. Java類枚舉枚舉類
- 3. 類型枚舉
- 4. 枚舉vs強類型枚舉
- 5. 枚舉拋出「不是枚舉類型」
- 6. 上枚舉類型
- 7. HTML5枚舉類型
- 8. 爲枚舉類型
- 9. 枚舉或類型
- 10. psycopg2枚舉類型
- 11. VBScript中的枚舉類型
- 12. 具有泛型類型的泛型枚舉枚舉
- 13. 在枚舉中枚舉
- 14. C#:基於不同枚舉類型的枚舉值返回枚舉值
- 15. 確定枚舉類中的枚舉數(或任何枚舉類中的特定枚舉值)
- 16. 在單獨的枚舉類型中重用枚舉值
- 17. 枚舉聲明中枚舉數的類型
- 18. 枚舉的枚舉[JAVA]
- 19. 帶枚舉的MySQL枚舉
- 20. 類枚舉類
- 21. 如何在枚舉類型僅在運行時知道枚舉枚舉?
- 22. 自動映射器枚舉枚舉類
- 23. 基於枚舉創建枚舉類別
- 24. 由枚舉型
- 25. 如何從所有枚舉類型中排除某些枚舉
- 26. 在Postgres中將枚舉類型整數轉換爲枚舉
- 27. 在Node.js中聲明和使用枚舉的枚舉
- 28. 映射枚舉類具有相同枚舉類型
- 29. 轉換枚舉來枚舉
- 30. 重新枚舉枚舉
看來,也不是沒有辦法針對Node.js的插件合法枚舉現在已經改變。在Node.js Google組中,我得到了以下問題的答案: 「你可以做什麼,將它們[參數]導出爲整數並在C++ land中檢查你的 輸入。 – Ivan 2013-04-02 05:28:22