是否有可能在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