I,m trying to write a C++ app to test these values, I print C++ pointers and implement a js function, taking an object, and print this object's pointer, so that I have a picture both what Js and C++. However, I discovered a strange thing - the function's arguments, transformer like this: *(args[0]->ToObject()) always appear as the same pointer between function calls. If I try to print two object arguments in the same call, these are consecutive addresses. So it seems v8 passes different objects than the actual ones, somehow shadowing the real object. The addresses are quite different than these that I get in C++, which leads me tho thing they are allocated on the stack. This all makes sense, but how is the shadowing mechanism implemented, and is there a way to reach the original objects from within the function?
On Mar 13, 4:06 pm, Matthias Ernst <[email protected]> wrote: > On Tue, Mar 13, 2012 at 3:00 PM, avasilev <[email protected]> wrote: > > Thanks, > > I was just thinking that as there is GetPrototype() and SetPrototype() > > for objects, which access '__proto__', there should be also for > > 'prototype'. > > Well, GetPrototype() has slightly different semantics, at least > judging from the documentation WRT hidden prototypes. > > > I'd like to use the topic to ask - what does GetPrototype() actually > > return on a function object then? Is it func.prototype.__proto__? > > I'd expect func.__proto__. > In the Chrome console this evaluates as such: > > (function() {}).__proto__ > function Empty() {} > > Matthias > > > > > > > > > > > On Mar 13, 3:50 pm, Matthias Ernst <[email protected]> wrote: > >> On Tue, Mar 13, 2012 at 2:26 PM, avasilev <[email protected]> wrote: > >> > Hello, > >> > Is there a way to get a function's prototype, equivalent to the > >> > function's 'prototype' property, e.g.: > > >> > function Func() > >> > {} > >> > var a = Func.prototype; > > >> > Using Object::GetPrototype() does not do the same and returns a > >> > different value. Setting an object's prototype via SetPrototype() to > >> > the property value gives the desired effect of instanceof recognizing > >> > the object as constructed by the function. Setting the prototype to > >> > the function's GetPrototype() does not achieve this. > >> > From the doc I don't see a way to access the "prototype" property of a > >> > function, besides getting it as an ordinary property via func- > >> >>Get(String::New("prototype")); > >> > Am I missing something? > > >> I don't think you are. Why should there be another way, apart from > >> convenience? If JS specifies it as a property, especially not even a > >> special one, then use the property accessor. You may of course argue > >> that it's inconsistent with, say, Array::Length. > > >> > Greetings > >> > Alex > > >> > -- > >> > 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 -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
