It might, provided typeof is 'function' and the constructor property is setup correctly. The other problem is that I currently invoke these constructor functions from C++ via NewInstance() and I can't find the equivalent of CallAsFunction() or NewInstanceAsFunction() on Object.
I may be able to find a way around this by wiring up the ruby and js peers without calling constructors from C++, but IIRC that was a very clean solution to make sure all the peered objects, whether constructed from javascript or injected directly into the context went through the same coupling code. I'll give it a try and let you know what I find. cheers, Charles On Aug 10, 2:31 pm, Anton Muhin <[email protected]> wrote: > I don't know for sure, but won't SetCallAsFunctionHandler help you? > > yours, > anton. > > On Tue, Aug 10, 2010 at 11:11 PM, Charles Lowell > > > > <[email protected]> wrote: > > > On Aug 10, 8:09 am, Anton Muhin <[email protected]> wrote: > >> Sorry, wrong address again. > > >> On Tue, Aug 10, 2010 at 5:06 PM, Anton Muhin <[email protected]> wrote: > >> > Charles, > > >> > I probably miss something here, but why you need FunctionTemplates at > >> > all, could not you use only ObjectTemplates? > > > How do I implement constructor functions with ObjectTemplate ? > > >> > yours, > >> > anton. > > >> > On Mon, Aug 9, 2010 at 10:58 PM, Charles Lowell > >> > <[email protected]> wrote: > >> >> Anton, > > >> >> Thanks for the reply. Perhaps it will make it clearer if I provide > >> >> some context. I'm asking in the context of The Ruby Racer, which > >> >> allows for embedding V8 into Ruby, and in particular what ruby classes > >> >> look like from javascript. > > >> >> Currently, we model ruby instances reflected into javascript as > >> >> instances created off of a FunctionTemplate which corresponds to that > >> >> instance's class. The FunctionTemplate corresponding to the ruby class > >> >> has property interceptors which it sets via > >> >> FunctionTemplate::InstanceTemplate()->Set{Named/Indexed} > >> >> PropertyHandler. > > >> >> The problem comes when we actually embed the ruby classes themselves > >> >> into javascript. This is done by having the class's FunctionTemplate's > >> >> CallHandler invoke the ruby constructor of the class, and then > >> >> associat it with a javascript instance created by calling > >> >> GetFunction().NewInstance(). That way, the constructor can be > >> >> (optionally) called directly from javascript, and the object's > >> >> 'constructor' will point to the right place. > > >> >> However, ruby classes (like javascript constructors) are objects too > >> >> with their own properties and methods and so I would like to be able > >> >> to intercept access to properties against the constructor function > >> >> itself in the same way that I intercept property access on objects. In > >> >> one sentence: I want to delegate Function object properties to a ruby > >> >> object in the same way that I delegate regular object properties to a > >> >> ruby object. > > >> >> Perhaps a little code would shed some light. > > >> >> class SomeClass > >> >> #instance method > >> >> def one > >> >> 1 > >> >> end > >> >> end > > >> >> #a class method > >> >> def SomeClass.two > >> >> 2 > >> >> end > > >> >> cxt = V8::Context.new > >> >> cxt['SomeClass'] = SomeClass > >> >> cxt.eval(<<--JS) > >> >> var s = new SomeClass() > >> >> s.one //=> 1 > >> >> s.constructor == SomeClass //=> true > >> >> SomeClass.two //=> currently undefined, I would like this to invoke > >> >> SomeClass.two() > >> >> JS > > >> >> It could be that there is an obvious solution which I've missed, but > >> >> does that help frame the question? > > >> >> cheers, > >> >> Charles > > >> >> On Aug 9, 11:18 am, Anton Muhin <[email protected]> wrote: > >> >>> Sorry, from the right address. > > >> >>> On Mon, Aug 9, 2010 at 8:16 PM, Anton Muhin <[email protected]> wrote: > >> >>> > Charles, good day, > > >> >>> > On Mon, Aug 9, 2010 at 7:56 PM, Charles Lowell > >> >>> > <[email protected]> wrote: > >> >>> >> While we're on the subject of property interceptors and API > >> >>> >> asymmetries, I can't figure out to add named and indexed getter/ > >> >>> >> setter, etc.. to Function objects inside the javascript runtime. > >> >>> >> I've > >> >>> >> searched extensively for a way to do this, but nothing as reliable > >> >>> >> as > >> >>> >> ObjectTemplate::SetNamedPropertyHandler() > > >> >>> > I don't quite understand what do you mean by 'inside the javascript > >> >>> > runtime'? Do you want to invoke JS function? Or add native > >> >>> > interceptor to JS function (to be invoked as a constructor)? > > >> >>> > AFAIK currently one can only add interceptors (both named and > >> >>> > indexed) > >> >>> > to FunctionTemplates. > > >> >>> > BTW, what are you trying to achieve? If you could tell us, maybe > >> >>> > there could be found some way out. > > >> >>> > yours, > >> >>> > anton. > > >> >>> >> On Aug 6, 12:49 pm, Anton Muhin <[email protected]> wrote: > >> >>> >>> From the right address. > > >> >>> >>> On Fri, Aug 6, 2010 at 9:39 PM, Anton Muhin <[email protected]> > >> >>> >>> wrote: > >> >>> >>> > Charles, > > >> >>> >>> > I just didn't have to time to implement the same functionality > >> >>> >>> > for > >> >>> >>> > indexed interceptor. Filing a bug and cc'ing you. > > >> >>> >>> > I'll try to implement it, but it might require some time to roll > >> >>> >>> > in to > >> >>> >>> > make transition to new api smooth. > > >> >>> >>> > yours, > >> >>> >>> > anton. > > >> >>> >>> > On Fri, Aug 6, 2010 at 9:31 PM, Charles Lowell > >> >>> >>> > <[email protected]> wrote: > >> >>> >>> >> Hi, > > >> >>> >>> >> I've noticed a small asymmetry in the interfaces for > >> >>> >>> >> IndexedPropertyQuery and NamedPropertyQuery. Specifically that > >> >>> >>> >> the > >> >>> >>> >> indexed version returns just a Boolean instead of and Integer > >> >>> >>> >> encoding > >> >>> >>> >> property attributes. Is this intentional? Rhino, for example > >> >>> >>> >> allows > >> >>> >>> >> for specifying attributes for indexed values as well. > > >> >>> >>> >> cheers, > >> >>> >>> >> Charles > > >> >>> >>> >> -- > >> >>> >>> >> 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 > > > -- > > 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
