hi victor, study Jacobs example it works correctly with javascript extensions.

Ben

On 10/8/08, Victor Grishchenko <[EMAIL PROTECTED]> wrote:
> On Oct 6, 2008, at 6:57 PM, Jacob wrote:
>> What problems did you encounter exactly? I plan to update my original
>> example code to reflect all the information gathered in this
>> discussion, so people can have a solid example to work from.
>
> I am wrapping a C++ class into a JavaScript class "Buffer". As far as
> I may see, I proceed along the lines of process.cc example. I create
> an object template for "Buffer"
>
> Handle<ObjectTemplate> MakeBufferTemplate () {
>       HandleScope handle_scope;
>       Handle<ObjectTemplate> result = ObjectTemplate::New();
>       result->SetInternalFieldCount(1);
>       result->Set(String::New("append"),
> FunctionTemplate::New(BufferAppend));
>
> then I put the template into a global variable evb_templ
>
> void InstallBuffer (Local<ObjectTemplate> global) {
>       HandleScope scope;
>       Handle<ObjectTemplate> raw_template = MakeBufferTemplate();
>       evb_templ = Persistent<ObjectTemplate>::New(raw_template);
>       Handle<FunctionTemplate> create_templ =
> FunctionTemplate::New(BufferCreate);
>       create_templ->SetClassName(String::New("Buffer"));
>       global->Set(String::New("Buffer"), create_templ );
>
> The BufferCreate functions does
>
>       Handle<Object> result = evb_templ->NewInstance();
>       Handle<External> buf_ptr = External::New(buf);
>       result->SetInternalField(0, buf_ptr);
>
> Basically, it works. Except, when I try to extend the class in my
> JavaScript code, it fails:
>
> Buffer.prototype.pollObject = BufferPollBencoded;
> var buf = new Buffer();
> for (key in buf)
>       print("def: "+key);
>
> Further, in the output I see e.g.
>
> def: append
>
> ... but no "def: pollObject"; later it says that
>
> js/base.js:70: TypeError: Object [object Object] has no method
> 'pollObject'
>               var torrent = buf.pollObject(specials);
>
> So, Buffer.prototype does not seem to affect the result of new
> Buffer(). Where is the mistake?
>
> --
>
>     V
> >
>


-- 
Regards,
Ben Nolan

http://bennolan.com/

skype: bennolan
cell: +64 21 770 662

--~--~---------~--~----~------------~-------~--~----~
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
-~----------~----~----~----~------~----~------~--~---

Reply via email to