4

Google は、V8 Javascript エンジンから使用できるアクセサで C++ クラス メソッドをラップする方法を説明してくれました。

ただし、これらのアクセサ プロパティを使用できるようにする JavaScript オブジェクトの名前を決定する方法については言及されていません。

(サンプルからの) C++ クラス インスタンスの名前を V8 Javascript に伝えるにはどうすればよいですか? または、すでに名前がある場合、それは何ですか?

次の 2 行は、アクセサーを設定します。

point_templ.SetAccessor(String::New("x"), GetPointX, SetPointX);
point_templ.SetAccessor(String::New("y"), GetPointY, SetPointY);

JavaScript から次のように使用できると思います。

someObject.x = someObject.y * 2;

" " が何であるかを判断するにはどうすればよいsomeObjectですか?

C++ コードと V8 Javascript ラッパーとのリンクを完了するためのコードが欠落しているように感じます。

たとえば、静的グローバル変数にアクセスするためのサンプル コードには、アクセサ関数を V8 JavaScript に明示的に公開する行がありました。

Handle<ObjectTemplate> global_templ = ObjectTemplate::New();
global_templ->SetAccessor(String::New("x"), XGetter, XSetter);
global_templ->SetAccessor(String::New("y"), YGetter, YSetter);
Persistent<Context> context = Context::New(NULL, global_templ)
4

1 に答える 1

3

OK、パズルの欠けている部分を見つけました:

context->Global()->Set(String::New("p"), obj);

この行は、前の手順で作成されたオブジェクトラッパーobjをオブジェクト「p」としてV8JavaScriptのグローバルコンテキストに公開します。ここでは「p」という名前を付けましたが、有効なJavaScript識別子であればどれでもかまいません。(ソース

于 2010-08-19T16:55:10.807 に答える