v8学习---使用内部字段给js添加全局变量
2013-11-10 23:09
465 查看
#include <v8.h> #include <iostream> using namespace v8; void Setter(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Local<Object> self = info.Holder(); Local<External> wrap = Local<External>::Cast(self->GetInternalField(0)); void* ptr = wrap->Value(); static_cast<int*>(ptr)[0] = value->Int32Value(); } void Getter(Local<String> property, const PropertyCallbackInfo<Value>& info) { Local<Object> self = info.Holder(); Local<External> wrap = Local<External>::Cast(self->GetInternalField(0)); void* ptr = wrap->Value(); info.GetReturnValue().Set(static_cast<int*>(ptr)[0]); } int main() { int age = 9527; Isolate* isolate = Isolate::GetCurrent(); HandleScope handleScope(isolate); Handle<ObjectTemplate> global = ObjectTemplate::New(); //所有由global这个模板产生的Object都有一个内部的字段 global->SetInternalFieldCount(1); global->SetAccessor(String::New("age"), Getter, Setter); Handle<Context> context = Context::New(isolate, NULL, global); Context::Scope context_scope(context); //global模板所产生的Object是context->Global()->GetPrototype(); //而不是context->Global(),所以context->InternalFieldCount() == 0 而 //context->Global()->GetPrototype()->InternalFieldCount() = 1 Handle<Object> global_proto = Handle<Object>::Cast(context->Global()->GetPrototype()); global_proto->SetInternalField(0, External::New(&age)); Handle<Script> script = Script::Compile(String::New("++age")); Handle<Value> value = script->Run(); String::AsciiValue ascii(value); printf("%s\n", *ascii); return 0; }
留意其中Local<External>, External::New, SetInternalFieldCount,SetInternalField,GetInternalField的用法
相关文章推荐
- v8学习---添加有返回值的js全局函数
- v8学习---添加js全局函数
- v8学习---添加js全局函数
- v8学习---添加带参数js全局函数
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- thinkphp的全局变量在js中使用
- JS OO 学习笔记 ——JS封装使用prototype添加方法
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- js 声明数组和向数组中添加对象变量 [前端学习 第七节]
- js使用心得——避免全局变量冲突的小技巧
- js 全局变量 在外部使用function内的变量
- v8学习---获取js变量的值
- JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
- js动态定义全局变量与使用
- 学习笔记---C语言中全局变量,变量,常量的定义与使用
- springMVC 中使用 filter过滤 和 global 启动的时候 添加全局变量
- js学习(五)-全局函数和类内部函数区别
- 在Flex应用中使用全局变量以及学习中flex中需要的一些资料
- 使用模块添加全局变量
- js中,全局变量与直接添加在window属性的区别