On Thu, May 7, 2015 at 6:08 AM, Jon Lederman <[email protected]> wrote:
> I have the following two wrappers listed below. I want the Api method of B
> to return an A in javascript. How do I do this? I can’t figure out how to
> construct the B class from the A Api method and return it? Any help would
> be greatly appreciated.
>
> Jon
>
> class A : public node::ObjectWrap {
> public:
> static void Init(v8::Handle<v8::Object> exports);
>
> private:
> explicit A(Thing *thing);
> ~A();
>
> static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
> static void Api(const v8::FunctionCallbackInfo<v8::Value>& args);
> static v8::Persistent<v8::Function> constructor;
>
> ESLconnection* _esl_connection;
> };
>
> #endif
>
> class B : public node::ObjectWrap {
> public:
> static void Init(v8::Handle<v8::Object> exports);
>
>
>
> private:
>
> ~B();
> explicit B(ESLevent *event);
>
> };
>
> #endif
The code below should work. You mention both A from B and B from A in
your post. This code implements the former.
void B::F(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::Local<v8::FunctionTemplate> function_template =
v8::FunctionTemplate::New(args.GetIsolate(), A::New);
v8::Local<v8::Function> function = function_template->GetFunction();
v8::Local<v8::Value> object_v = function->NewInstance(); // Can pass args.
if (object_v.IsEmpty()) return; // Constructor threw.
assert(object_v->IsObject()); // Should never fail.
v8::Local<v8::Object> object = object_v.As<v8::Object>();
// Do something with |object| here.
args.GetReturnValue().Set(object);
}
You may want to cache the v8::FunctionTemplate or the v8::Function in
a v8::Persistent so you don't have to recreate it all the time. Good
luck!
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/CAHQurc9RrBTF%2Bz3euXE8a2bAqzw7BDZfRcp7JbuqZ5g8oj8MPQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.