5

enumNode.jsアドオンのC++コードでいくつかを作成し、このタイプをjsコードに公開することは可能ですか? ネイティブの列挙型が js に存在することがわかりましたが、v8 エンジンでの実装に関する情報はありません。

4

3 に答える 3

4

Kevinの例では、使用する前にのインスタンスを作成する必要があるLocal<Object>ため、必ず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.
于 2016-02-01T10:28:37.613 に答える
3

javascript には特定の列挙型はありません。代わりに、web のように定数 int を使用します。プロパティUNSENT,OPENED, HEADERS_RECEIVED,LOADING,DONEXMLHttpRequestC++ の列挙型として定義されます。これらのプロパティを JavaScript の v8 でエクスポートするには、次のように使用します。

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.
于 2013-03-30T09:38:00.323 に答える
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
                       );
于 2016-12-21T11:18:24.120 に答える