If you want the value to be an instance of a template, you should just Set
the value to the template itself rather than the result of instantiating
the template. (So drop GetFunction())

Regards,
Toon

On Mon, Jun 6, 2016, 02:13 Mark Logan <m...@artillery.com> wrote:

> This is a very similar (perhaps identical) question to:
> https://groups.google.com/forum/#!searchin/v8-users/SetAccessorProperty/v8-users/_u6dmOLAEnY/p3ErLIpoAAAJ,
> but unfortunately I couldn't learn enough from that thread. (Also: The v8
> embedder's guide is out of date, and I read all the uses of
> Template::SetAccessorProperty in the v8 tests but found no help there.)
>
> One used to be able to do the following:
>
>   Local<FunctionTemplate> ctor = FunctionTemplate::New(...); // make a
> constructor
>   auto prototype = ctor->PrototypeTemplate();
>   prototype->Set(String::NewFromUtf8("functionName"),
> FunctionTemplate::New(...)->GetFunction());
>
> Now that Set is banned from accepting non-primitive values, we're directed
> to use SetAccessorProperty for this sort of thing. My reading of the thread
> that I linked above suggests that I should write the following:
>
>   Local<FunctionTemplate> ctor = FunctionTemplate::New(...); // make a
> constructor
>   auto prototype = ctor->PrototypeTemplate();
>   prototype->SetAccessorProperty(String::NewFromUtf8("functionName"),
> FunctionTemplate::New(...));
>
> However, according to my reading of the API, this shouldn't work, because
> we'd need to pass in a FunctionTemplate for a getter function that returns
> the function I actually want to install. And indeed, this code doesn't seem
> to work - the handler I provide for the FunctionTemplate is called with 0
> arguments, just as if a getter were expected here.
>
> Creating a FunctionTemplate for a getter that returns a function is, as
> far as I can tell, impossible to do easily and efficiently in the v8 API
> (how do you create the function in advance and make it available to the
> getter? A lambda won't work.)
>
> What's the right way to do this?
>
> Thanks,
> Mark
>
> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to