Ok so I've figured out how to make the object behave as an array: Local<Object> obj = self->wrap_members(&team->members); obj->Set(String::NewFromUtf8(info.GetIsolate(), "length", NewStringType:: kNormal).ToLocalChecked(), Integer::New(info.GetIsolate(), team->members. size())); obj->SetPrototype(Array::New(info.GetIsolate())->GetPrototype()); info.GetReturnValue().Set(obj);
This feels a little... janky? though. Is there a better way to do this? On Saturday, 6 August 2016 17:01:47 UTC+1, Jack wrote: > > Hey, > > Currently I have a data structure that is a little something like this in > C++: > *Team *(class with properties e.g. Name, ID, etc.) > |____* Members* (again has it's own properties, e.g. Name. Team holds > a vector of pointers to Member objects.) > > I want this to work like this in JS: > Team.Name gives the Team's name (same for ID, etc.) > Team.Members[0].Name gives the Team's first member's name (again same for > other basic properties of the Member class.) > > > I can implement the basic Team class by creating an ObjectTemplate and > binding a named property getter callback (this is done the same as the > process.cc example, really) which will return things like Team.Id, > Team.Name just fine. > However, I'm unsure how to implement the Team.Members part. If I implement > it by doing something like this in Team's named property getter callback: > if (property_s == "Members") { // property_s is just the property > argument casted to a c++ string > Local<Object> owner_obj = self->wrap_members(&team->members); // > wrap_members returns a Members object based on an ObjectTemplate with > indexed property callbacks > info.GetReturnValue().Set(owner_obj); > } > where wrap_members returns an Object created from ObjectTemplate with an > *indexed* property getter callback then I can get it working to some > degree, e.g. Team.Members[0] will return the correct name for the first > Team member (I set it to just return the name for testing purposes.) My > plan after this would be to make it so that the callback for > Team.Members[x] would return yet another object based on an > ObjectTemplate which then contains the information about that team member > (Name, ID, etc.) > > However my issues right now are: > > - Is this really the best way to implement this structure? It seems > like I'm creating a lot of ObjectTemplates > - How can I implement .length for Team.Members? Do I have to also bind > a named propeerty getter callback function to it? This leaves me creating > even more functions. > - How do I throw an out-of-bounds error or the like if the index > provided is out of bounds? > > > I'm not sure if my explanation is understandable, please reply if it's not > and I'll try and improve it. Thanks. > -- -- 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.