V8 学习手册(四)—— 关联C++类

本文介绍了如何在V8引擎中通过ObjectTemplate和FunctionTemplate将C++类与JavaScript对象关联起来。通过SetInternalFieldCount和SetInternalField方法传递C++对象实例指针,并探讨了动态创建对象及实例化过程。虽然能将Objective-C类指针传入,但内存管理可能出现问题,目前采用的是内存泄露的临时解决方案。
摘要由CSDN通过智能技术生成

除了上文说的全局函数,我们还可以创建类函数。

虽然我使用JS很少,但是就我感觉,函数和对象其实就是一个东西的两种表现。函数是一种特殊的对象,创建的时候,需要进行一些操作,返回的值不是函数对象,而是指定的其他东西。


希望动态创建一个对象,自然首先想到应该使用ObjectTemplate。同时,也可以发现这个类中有SetInternalFieldCount,而Object中有SetInternalField。这两个方法,就用来传递C++代码中的对象实例指针给一个JS的Object。然后再将一个FunctionTemplate添加进入ObjectTemplate。这个FunctionTemplate对应的C函数,从传入的参数中取得前面传递的对象,然后进行对应操作。其实V8仅仅维护的是一个指针,所以我传入Objective-C的类指针,访问也没什么问题。不过引用计数管理内存应该会有问题吧。暂时还找不到应该何时去调用release,就先泄露着吧。

   

    Handle<ObjectTemplate> mars_obj_templ = ObjectTemplate::New();
    mars_obj_templ->Set("backToMars", FunctionTemplate::New(backToMars));
    mars_obj_templ->SetInternalFieldCount(1);


    Local<Object> obj = mars_obj_templ->NewInstance();
    V8Mars* mars = [[V8Mars alloc] init];
    mars.name = @"earth";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值