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

Reply via email to