I found it esaier to work with SetAccessorProperty https://v8docs.nodesource.com/node-0.12/db/df7/classv8_1_1_template.html#a25856e3bf1b8b0d3ee7865687a8e6d97
example https://github.com/d3x0r/sack.vfs/blob/master/src/gui/sack_image_module.cc#L134 defines some get/set methods on an image class; that works with the prototype template, but it's part of Template should also be availble on an ObjectTemplate the setter has a default of 0 (NULL) but like imageTemplate->PrototypeTemplate()->SetAccessorProperty( String::NewFromUtf8( isolate, "jpgQuality" ) , FunctionTemplate::New( isolate, ImageObject::getJpegQuality ) , FunctionTemplate::New( isolate, ImageObject::setJpegQuality ), DontDelete ); But they just take 'regular' function definitions void ImageObject::getJpegQuality( const FunctionCallbackInfo<Value>& args ) { } void ImageObject::setJpegQuality( const FunctionCallbackInfo<Value>& args ) {} Now, what happens if you also define a function of the same name I don't know. On Tue, Sep 11, 2018 at 6:24 AM Andrei Vinogradov <anri....@gmail.com> wrote: > Hello. > I'm trying to create new template that should match required behaviour but > now i'm stuck with NamedPropertyHandler. > What I need to achieve: > 1. All property access calls should be processed by unified handlers > (getter/setter for indexed access and getter/setter for named access). > (This part is working). > 2. Template also should have a set of predefined functions with different > handlers for each. (This part is not working). > > What I am doing. Assume that we have code like following: > > void NamedGetter(Local<Name> name, const PropertyCallbackInfo<Value> &info > ) { ... } > void NamedSetter(Local<Name> name, Local<Value> value, const > PropertyCallbackInfo<Value> &info) { ... } > void IndexedGetter(uint32_t index, const PropertyCallbackInfo<Value> &info > ) { ... } > void IndexedSetter(uint32_t index, Local<Value> value, const > PropertyCallbackInfo<Value> &info) { ... } > void FunctionAHandler(const FunctionCallbackInfo<Value> &info) { ... } > > //Lets skip initialization code... > > Local<String> funcName = String::NewFromUtf8(isolate, "FunctionA", v8:: > NewStringType::kNormal).ToLocalChecked(); > > Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); > templ->Set(funcName, FunctionTemplate::New(isolate, FunctionAHandler, > funcName)); > templ->SetHandler(NamedPropertyHandlerConfiguration(NamedGetter, > NamedSetter)); > templ->SetHandler(IndexedPropertyHandlerConfiguration(IndexedGetter, > IndexedSetter)); > > //Creating instance of template in current context with name my_instance... > > Then, when i'm executing JS like "my_instance.FunctionA();" this is > proccessed by V8 like i'm accessing property with name "FunctionA". I mean > it's starting to execute NamedGetter function. > And after that it fails with error: > > <unknown>:10: Uncaught TypeError: my_instance.FunctionA is not a function > > If I'm not adding NamedPropertyHandler to template - FunctionAHandler is > invoked like expected. > So my question is - how to avoid executing NamedGetter when function with > such name is defined on template? Or maybe i't possible to proccess > function calls inside NamedGetter and avoid creating handlers for each > function I need in template? > I would appreciate any help with this. > > -- > -- > 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.