I tried using the code below, but the "names" array is empty (I guess
because these properties are marked as "DontEnum")
Local<v8::Object> proto =
Local<v8::Object>::Cast(v8::Array::New(1)->GetPrototype());
internalFieldArrays =
Persistent<ObjectTemplate>::New(ObjectTemplate::New());
Local<v8::Array> names = proto->GetPropertyNames();
for ( unsigned int i=0; i<names->Length(); i++ ) {
v8::Local<v8::String> name =
names->Get(i)->ToString();
internalFieldArrays->Set(name,
proto->Get(name));
}
It seems that the only way to get the forEach property is:
Local<v8::Value> val4 = arr->Get(v8::String::New("forEach"));
Hence I would have to manually copy each property by name, there is no
better way?
On Apr 7, 11:57 am, Anton Muhin <[email protected]> wrote:
> Good day, ajg,
>
> I don't think you can (and should be able to) create v8::Array with
> ObjectTemplate.
>
> However, it's easy to install Array functions to any kind of
> object---ECMAScript array functions were intentionally designed to
> work with generic objects---all you need is to add a length property.
> Simple test would be to do something like [].forEach.call(yourobject,
> args). To use convenient syntax yourobject.forEach just add
> Array.prototype.forEach and other functions to prototype of your
> object (see PrototypTemplate) or an object directly (1st option is
> preferable).
>
> hth and yours,
> anton.
>
> On Thu, Apr 7, 2011 at 9:59 PM, ajg <[email protected]> wrote:
> > I already have a working ObjectTemplate that enables js code to access
> > C++ objects in a lazy fashion, using the NamedPropertyHandler.
> > Now I also need to create v8:Array that is backed by a C++ object
> > using the IndexedPropertyHandler.
> > But it seems that ObjectTemplate can only create a v8::Object, not a
> > v8::Array.
> > Doing an indexed access on v8::Object works fine but then the built-in
> > functions like "forEach" are not available.
> > Basically I need to either:
> > - create a v8::Array with IndexedPropertyHandlers
> > - create a v8::Object with IndexedPropertyHandlers and transfer the
> > builtin methods to it, or somehow convert it to a v8::Array.
> > Note that on C++ side it is not a native type array, so I cannot use
> > the v8::Object::SetIndexedPropertiesToExternalArrayData
> > Any suggestion?
> > thanks
>
> > --
> > v8-users mailing list
> > [email protected]
> >http://groups.google.com/group/v8-users
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users