My understanding is that the signature picking out the object in the prototype chain was the difference between info.This and info.Holder. Mostly from reading the thread I linked previously.
Also, this is from the doxygen docs for signature: > A receiver matches a given signature if the receiver (or any of its hidden prototypes) was created from the signature's FunctionTemplate <http://v8.paulfryzel.com/docs/master/classv8_1_1_function_template.html>, or from a FunctionTemplate <http://v8.paulfryzel.com/docs/master/classv8_1_1_function_template.html> that inherits directly or indirectly from the signature's FunctionTemplate <http://v8.paulfryzel.com/docs/master/classv8_1_1_function_template.html>. On Mon, May 29, 2017 at 12:01 AM, Zac Hansen <[email protected]> wrote: > In this thread: https://groups.google.com/forum/#!topic/v8-users/ > Axf4hF_RfZo > > it says: > > > If your function has a signature that says that it must be called on a > particular type v8 will search the prototype chain for an object of > that type when the function is called. > > > Given my code, I don't understand why making an object that directly sets > its prototype as an object capable of calling a function with a signature > wouldn't be able to call that same function. > > Is that thread I linked wrong? Or am I misunderstanding something? > > On Sun, May 28, 2017 at 11:57 PM, Jochen Eisinger <[email protected]> > wrote: > >> A signature requires the object either be constructed from the same >> FunctionTemplate (as e.g. new MyType() does), or from a FunctionTemplate >> that inherited from the signature's FunctionTemplate. >> >> Note however that the "info.Holder" would still point at the receiver, >> and not the prototype with the matching signature :/ >> >> On Sun, May 28, 2017 at 7:27 PM Zac Hansen <[email protected]> wrote: >> >>> I create a "constructor" FunctionTemplate, create a signature from that >>> FunctionTemplate, then on that FunctionTemplate's PrototypeObject >>> ObjectTemplate, I create a bunch of FunctionTemplate's using the signature >>> I generated before. >>> >>> I can call the function with objects created directly from the >>> "constructor" FunctionTemplate. But if I call it from an object with that >>> object in the prototype chain, it doesn't work. >>> >>> base = new MyType(); >>> derived = Object.create(base); // setting .__proto__ has the same >>> behavior >>> >>> base.some_native_function(); <== works >>> >>> derived.some_native_function(); <== TypeError: Illegal invocation >>> >>> >>> >>> Anyone know what I might be doing wrong? If I remove the signature, >>> everything works fine, but then holder == this when calling with derived, >>> which isn't what I want. >>> >>> --Zac >>> >>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> 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 [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- >> -- >> v8-users mailing list >> [email protected] >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "v8-users" group. >> To unsubscribe from this topic, visit https://groups.google.com/d/to >> pic/v8-users/dR8oI0ZwzG0/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- -- v8-users mailing list [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
